Oracle存储过程之merge into 函数(一)
来源:互联网 发布:mysql没有密码如何连接 编辑:程序博客网 时间:2024/06/07 00:30
继上一篇博客:Oracle存储过程游标使用的merge into 函数的使用。
http://blog.csdn.net/z1729734271/article/details/52351700
本人之前也没有接触过Oracle的存储过程,这些只是最近项目经理让我参考写的一些总结,有什么不好的,不对的希望大家可以提出来。
create or replace package body PG_HOSPITAL_WT_TO_JSQY is--这个package包里可以放多个存储过程procedure GETHOSPITAL is begin merge into T_JSQY_HOSPITAL a --存储过程的目标表 using (select t.* from (select v.*, row_number() over(partition by v.id order by v.lastupdate_ desc nulls last) rnum from WT_DEPT v where substr(v.dept_class,1,2) not in ('D1','D3','D4','D5') and substr(v.dept_class,1,1) not in ('L','K') and v.jgbd in ('211','112') and v.todate_ > '20160701' and v.enabled='1' and v.ZFRQ is null) t where rnum = 1) e --将查询出的信息当做表e on (a.ORGANCODE = e.id) --限定条件 when matched then --当符合这些条件时 更新 update set a.organname = e.caption, a.gbcode = e.dept_adrresscode, a.address = e.tx_dz, a.streetcode = substr(e.DEPT_XZJDCODE, 0, 6), a.genrecode = e.dept_class, a.managecode = e.dept_code, a.membershipcode = e.lsgx, a.WHOUPDATEID = '存储过程更新', a.UPDATEDDATE = sysdate, a.removed = '0' when not matched then --不符合条件时,插入 insert (id, organcode, organname, gbcode, address, streetcode, genrecode, managecode, membershipcode, WHOCREATEID, CREATEDDATE, REMOVED) values (SEQ_ORGID1606.Nextval, e.id, e.caption, e.dept_adrresscode, e.tx_dz, substr(e.DEPT_XZJDCODE, 0, 6), e.dept_class, e.dept_code, e.lsgx, '存储过程插入', sysdate, '0'); exception --异常信息处理 when others then dbms_output.put_line('>>>>>>>>>>>>>>>>>>'||sqlerrm);--这个请看下面,具体的我详细查了一下 commit; end;
dbms_output.put('a'); --写入buffer但不输出 dbms_output.put('b'); --写入buffer但不输出 dbms_output.new_line; --回车(换行),输出 dbms_output.put_line('hello world!'); --输出并换行 dbms_output.put('d'); --写入buffer但不输出
Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。OTHERS处理器应该是异常处理块中的最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的Oracle异常,所以在程序的最外层使用一个OTHERS处理器的话,将可以确保所有的错误都会被检测到。 在一个内在的异常中,SQLCODE返回Oracle错误的序号,而SQLERRM返回的是相应的错误消息,错误消息首先显示的是错误代码。SQLCODE返回的是负数,除非Oracle的错误为“ORA-01403:NO DATA FOUND”(译:ORA-01403:未找到数据),当Oracle错误为“ORA-01403:NO DATA FOUND”时,其对应的SQLCODE为+100。对于用户自定义的异常,SQLCODE返回的是+1,而SQLERRM返回的是User-Defined Exception。 一个Oracle的错误消息最多只能包含512个字节的错误代码。 如果没有异常被触发,则SQLCODE返回0,SQLERRM返回“ORA-0000:normal, successful completion”。 实例 Exception when osi_general_error then when OTHERS THEN out_ErrorMsg := SUBSTR(SQLERRM,1,100); out_ErrorNbr := ABS(SQLCODE); 此段内容解释参考博客: http://blog.csdn.net/azkaser/article/details/4925084
最近对存储过程的操作,在我理解,存储过程是一个SQL语句的集合来完成系统内某些特定的需求,这些需求可以是一个sql搞定的,也可以是多个sql组合完成的。因为最近操作都是十几万,几十万的数据,运用存储过程可以大大减少SQL调用从而提高我们的执行效率。这些只是我最近接触的两种,存储过程里面还可以有好多判断if else之类的,这些判断都可以大大减少我们的执行SQL的语句,以后再做补充。
后续补充了一篇merge into 存储过程的逻辑整理,大家可以看一下,存储过程的逻辑还是是很重要!!!!
http://blog.csdn.net/z1729734271/article/details/52437856
什么是存储过程,存储过程的作用及优点
http://blog.csdn.net/z1729734271/article/details/52785013
1 0
- Oracle存储过程之merge into 函数(一)
- Oracle存储过程之merge into 函数(二)
- Oracle存储过程笔记2:动态SQL(MERGE INTO )
- oracle 之 merge into 函数--简译
- Oracle 之 MERGE INTO
- Oracle Merge into使用小节(一)
- merge into(oracle)
- ORACLE存储过程(一)之初次见面
- oracle 之 merge into 的用法
- Oracle-----Update语句优化之merge into
- Oracle Database之MERGE INTO详细介绍
- oracle存储过程与函数(一)
- DB2数据库存储过程运用MERGE INTO小示例
- ORACLE 存储过程INTO 多个变量
- oracle与mysql存储过程insert into
- oracle存储过程之切割字符串(一)
- Oracle select --merge into:
- oracle merge into 测试
- 简单的例子了解View事件分发
- html的模型
- VLFeat和Piotr’s Image & Video Matlab Toolbox在Matlab中的安装与配置
- arm电子相册项目——按键模块篇led.c
- 对象锁、类锁以及synchronized
- Oracle存储过程之merge into 函数(一)
- SOP,GMP,ECR/ECN是什么意思
- hdu2602(01背包模板题)
- MongoDB的数据库和集合的基础操作
- Android LayoutInflater详解
- guava overview(very incomplete)
- markdown编辑器
- Android数据存储之文件存储
- MySQL利用外键实现级联操作