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

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

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

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. 设计模式(23)--Visitor--访问者模式--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义:    访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦 ...

  2. 【读书笔记】iOS-网络-使用推送通知

    一,本地通知 本地通知有64位的最大限制.虽然,你依然可以调度通知,不过到到达的通知数被限定为接近64个,并且按照fireDate的顺序排序,系统会忽略掉其余的通知.这意味着如果现在有64个调用的本地 ...

  3. AngularJS学习 之 创建项目

    1.本机搭建好AngularJS运行需要的环境 2.利用Yeoman来创建项目目录 以管理员身份打开cmd,输入 yo angular StockDog 然后按回车,安装进程开始会问几个问题,比如要不 ...

  4. Dynamics 365Online 使用adal.js注册和配置SimpleSPA应用程序

    本篇是基于dynamics 365online撰写,本文中使用的365online及azure均为试用版,因为online在国内还没落地,所以我申请的是新加坡版,online的申请方式可见我之前的博文 ...

  5. 13 款惊艳的 Node.js 框架——第1部分

    [编者按]本文作者为 Peter Wayner,主要介绍13款至精至简的 Node.js 框架,帮助你简化高速网站.丰富 API 以及实时应用的开发流程.本文系国内 ITOM 管理平台 OneAPM ...

  6. 如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序

    负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...

  7. python自学——文件处理(截取文件内容)

    #截断文件内容使用的函数为truncate()来截断文件中的内容# 注意当truncate()括号内没有定义对象时则会删除文件内容:当括号内为指定某个条件时文件会截取从0到指定位置的内容f=open( ...

  8. guider – 全系统Linux性能分析器

    Guider是一个免费且开源的,功能强大的全系统性能分析工具,主要以Python for Linux 操作系统编写. 它旨在衡量系统资源使用量并跟踪系统行为,从而使其可以有效分析系统性能问题或进行性能 ...

  9. Nginx 配置支持 WebSocket

    找到nginx的配置文件:nginx.conf,增加以下三行配置. 示例: server { listen 80; server_name www.test.com; location / { pro ...

  10. IIS 部署SSL证书

    1.导入证书 打开IIS服务管理器,点击计算机名称,双击‘服务器证书 双击打开服务器证书后,点击右则的导入 选择证书文件,点击确定 2.站点开启SSL 选择证书文件,点击确定 点击网站下的站点名称,点 ...