Oracle 存储过程procedure之数据更新-游标
在日常工作中,经常会碰到后台外导一批数据,并将外导数据处理至系统表中的情况。
面临这种情况,我一般采用写存储过程批处理的方式完成,写好一次以后,再次有导入需求时,只需要将数据导入到中间表,然后执行存储过程就搞定了。
以下是更新某个基础类型表(有上下自关联)的存储语句:
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之数据更新-游标的更多相关文章
- Oracle存储过程procedure in、out、in out 模式参数【不发布,纯转】
Oracle存储过程procedure in.out.in out 模式参数 Oracle存储过程基本语法介绍 注意存过不会自动提交,需要在存过本身添加commit; rollback;等语句
- Oracle存储过程中如何使用游标
--本存储过程的功能:把test_tbl2中与test_tbl1中ID相同但salary不同的记录中的salary的值更新为test_tbl1中的salary的值--创建存储过程create or r ...
- Oracle 存储过程 PROCEDURE
存储过程 一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一 ...
- Oracle存储过程procedure
--给plsql块设置一个名称保存下来便于调用 /* Create or replace procedure 名称 As 声明变量 Begin //代码块 End; --plsql块 Declare ...
- Oracle存储过程Procedure语法及案例
create or replace procedure replace(desstr in varchar2, replacestr in varchar2, tablename in varchar ...
- 用java 调用oracle存储过程总结
SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...
- (转)oracle 存储过程 带游标作为OUT参数输出
(转)oracle 存储过程 带游标作为OUT参数输出 存储过程返回OUT参数的游标 例子. 包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 ...
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- Oracle存储过程,游标使用
Oracle存储过程: 语法: CREATE [OR REPLACE] PROCEDURE procedure_name (arg1 [mode1] datatype1,arg2 [mode2] da ...
随机推荐
- 解决linux下安装nodejs后npm未成功安装的问题
1.下载npm软件包 点击链接进入下载页面:npm下载 2.下载完成后将压缩包放到家目录下就可以(也可以放到其他地方) 3.解压 tar -zxvf 压缩包名称,解压后你会得到一个文件夹,进入后是这样 ...
- element-ui input组件源码分析整理笔记(六)
input 输入框组件 源码: <template> <div :class="[ type === 'textarea' ? 'el-textarea' : 'el-in ...
- IIS 下调用证书出现异常解决方案 (C#)
程序发布前,跑在vs上是没问题的,当发布后,程序就报错了.通过系统日志找到了错误所在:证书调用时出现了异常.原因是:在IIS上调用证书是需要配置的,具体配置如下: 一. 确保证书已安装 1. 点击 [ ...
- Nginx 优化配置及详细注释
Nginx 的nginx.conf文件,是调优后的,具体影响已经写清楚注释,可以拿来用,有一些设置无效,我备注上了,不知道是不是版本的问题,回头查一下再更正. #普通配置 #==性能配置 #运行用户 ...
- 怎样删除PeopleSoft进程服务器定义
比如在克隆环境时候,把生产的环境克隆到DEV环境,你可能会在进程调度服务器中看到了生产的进程服务器,例如:你可能会在进程调度的时候选择一个server,但是这个server并没有在psadmin下创建 ...
- npm install "Unexpected end of JSON input while parsing near"问题
问题 最近配了台新电脑,开始装Node环境,去官网下载了最新的Node安装包.安装也没有问题,但是在使用npm install这个命令的时候,就会出现Unexpected end of JSON in ...
- 从ibd文件获取表空间id
xtrabackup恢复过程中出现如下错误 InnoDB: Doing recovery: scanned up to log sequence number ( %) InnoDB: Doing r ...
- IAM页面是在统一区分配的还是在混合区分配的?
IAM页面是在统一区分配的还是在混合区分配的? IAM页面的作用这里就不说了,网上的资料很多 文章中用到的工具:查看SQLSERVER内部数据页面的小插件Internals Viewer 先建立四张表 ...
- Prometheus Node_exporter 之 Network Netstat TCP
Network Netstat TCP /proc/net/snmp 1. TCP Segments type: GraphUnit: shortLabel: Segments out (-) / i ...
- python基础知识回顾之元组
元组与列表的方法基本一样,只不过创建元组是用小括号()把元素括起来,两者的区别在于,元组的元素不可被修改. 元组被称为只读列表,即数据可以被查询,但不能被修改,列表的切片操作适用于元组. 元组写在小括 ...