在日常工作中,经常会碰到后台外导一批数据,并将外导数据处理至系统表中的情况。

面临这种情况,我一般采用写存储过程批处理的方式完成,写好一次以后,再次有导入需求时,只需要将数据导入到中间表,然后执行存储过程就搞定了。

以下是更新某个基础类型表(有上下自关联)的存储语句:

CREATE OR REPLACE PROCEDURE BSS_LS.PRO_IMP_RESPONSIBILITY
IS
CURR_PARENT_ID INT;
CURR_PARENT_NAME VARCHAR (200);
CURR_NAME VARCHAR (200);
CURR_REMARK VARCHAR (500); CURSOR RESP_CUR
IS
SELECT ONE, TWO, THREE FROM FOR_RESPONSIBILITY; --声明游标,表FOR_RESPONSIBILITY为外导的中间表 BEGIN
OPEN RESP_CUR; --打开游标 LOOP --遍历游标
FETCH RESP_CUR --遍历游标中每行字段值到对应的变量中
INTO CURR_PARENT_NAME, CURR_NAME, CURR_REMARK; EXIT WHEN RESP_CUR%NOTFOUND; --遍历完毕 退出 SELECT MAX (ID)
INTO CURR_PARENT_ID
FROM BSS_RESPONSIBILITY_BAK
WHERE NAME = CURR_PARENT_NAME; --查找上级ID IF CURR_PARENT_ID > 0 --找到ID,表BSS_RESPONSIBILITY_BAK为系统表
THEN
INSERT INTO BSS_RESPONSIBILITY_BAK (ID,
PARENT_ID,
NAME,
IS_USE,
REMARK)
VALUES (BSS_RESPONSIBILITY_SEQ.NEXTVAL,
CURR_PARENT_ID,
CURR_NAME,
1,
CURR_REMARK);
ELSE --未找到
SELECT BSS_RESPONSIBILITY_SEQ.NEXTVAL INTO CURR_PARENT_ID FROM DUAL; INSERT INTO BSS_RESPONSIBILITY_BAK (ID, NAME, IS_USE)
VALUES (CURR_PARENT_ID, CURR_PARENT_NAME, 1); INSERT INTO BSS_RESPONSIBILITY_BAK (ID,
PARENT_ID,
NAME,
IS_USE,
REMARK)
VALUES (BSS_RESPONSIBILITY_SEQ.NEXTVAL,
CURR_PARENT_ID,
CURR_NAME,
1,
CURR_REMARK); COMMIT;
END IF;
END LOOP; --结束遍历游标 CLOSE RESP_CUR; --关闭游标
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE;
END;
/

PS:游标的使用

游标声明方式有两种:

一、CURSOR  游标名 IS  select查询语句;

CURSOR your'sCursor IS select * from table

二、类型游标

TYPE my_cur_type IS REF CURSOR; -- 自定义一个游标类型
_cur my_cur_type ; -- 游标类型变量_cur -- ...
OPEN _cur FOR select * from table;
LOOP
FETCH _cur INTO _cur_id;
EXIT WHEN _cur%NOTFOUND; -- insert update select delete 等操作 END LOOP;
CLOSE _cur;

游标的行变量声明

--定义一个游标的行变量
_cur_row _cur%rowtype; --使用行中的值
fetch _cur into _cur_row;
_cur_row.xx1、 _cur_row.xx2
 

Oracle 存储过程procedure之数据更新-游标的更多相关文章

  1. Oracle存储过程procedure in、out、in out 模式参数【不发布,纯转】

    Oracle存储过程procedure in.out.in out 模式参数 Oracle存储过程基本语法介绍 注意存过不会自动提交,需要在存过本身添加commit; rollback;等语句

  2. Oracle存储过程中如何使用游标

    --本存储过程的功能:把test_tbl2中与test_tbl1中ID相同但salary不同的记录中的salary的值更新为test_tbl1中的salary的值--创建存储过程create or r ...

  3. Oracle 存储过程 PROCEDURE

    存储过程  一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一 ...

  4. Oracle存储过程procedure

    --给plsql块设置一个名称保存下来便于调用 /* Create or replace procedure 名称 As 声明变量 Begin //代码块 End; --plsql块 Declare ...

  5. Oracle存储过程Procedure语法及案例

    create or replace procedure replace(desstr in varchar2, replacestr in varchar2, tablename in varchar ...

  6. 用java 调用oracle存储过程总结

    SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...

  7. (转)oracle 存储过程 带游标作为OUT参数输出

    (转)oracle 存储过程 带游标作为OUT参数输出 存储过程返回OUT参数的游标 例子. 包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 ...

  8. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  9. Oracle存储过程,游标使用

    Oracle存储过程: 语法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] da ...

随机推荐

  1. 排序算法(7)--exchang Sorting--交换排序[2]--Quick Sort--快速排序

    1.基本思想 从待排序列中选取一元素作为轴值(也叫主元). 将序列中的剩余元素以该轴值为基准,分为左右两部分.左部分元素不大于轴值,右部分元素不小于轴值.轴值最终位于两部分的分割处. 对左右两部分重复 ...

  2. 排序算法(6)--exchang Sorting--交换排序[1]--Bubble Sort--冒泡排序

    1.基本思想 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 2.实现原理 冒泡排序是一种简单的排序算法,根据顺序两 ...

  3. Atcoder:AGC004F Namori

    传送门 先考虑树,树是一个二分图. 看到是二分图并且每次是对两边的同色的点反色可以想到转化:让奇数层的点为黑,偶数为白,变成每次可以交换两个点的颜色. 把黑看成 \(-1\),白看成 \(1\),那么 ...

  4. css BFC布局及用处

    http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 这篇文章讲的很简单很实用

  5. PeopleSoft单点登录工作原理

    单点登录是指用户在仅通过一次身份验证后,可以在多个应用程序中自由切换. 这意味着用户只需要一次登录信息,只要他点击指向其他应用程序的链接,安全信息就会自动从一个应用程序传递到另一个应用程序,用户就不会 ...

  6. 活字格Web应用平台学习笔记4 - 添加记录

    今天继续学习活字格基础教程,目标是创建一个页面,增加记录. 开始之前,系统会自动把上一次的工程文件加载进来. 这是做好后的样子. 我点添加员工的超链接: 先后加了2条员工的信息进来. 不错,设计界面是 ...

  7. 《MVC+EF》——用DBFirst创建ADO.NET实体数据模型和对象关系映射

    转载于:http://blog.csdn.net/zhoukun1008/article/details/50528145 现在越来越喜欢MVC了,不光是因为ITOO中用到了他,而是因为它里面包含了很 ...

  8. C# socket 发送图片和文件

    先说服务端:界面:如图: 界面设计源码 namespace SocketJPGToTxt { partial class Form1 { /// <summary> /// 必需的设计器变 ...

  9. ln -s 软连接介绍

    软连接(softlink)也称符号链接.linux里的软连接文件就类似于windows系统中的快捷方式.软连接文件实际上是一个特殊的文件,文件类型是I.软连接文件实际上可以理解为一个文本文件,这个文件 ...

  10. 用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)-陈远波

    一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...