设为首页收藏本站

IT技术擎 - 最棒的IT web技术交流社区

 找回密码
 注册为IT技术擎人

QQ登录

只需一步,快速开始

搜索
热搜: php h5 jquery
查看: 24|回复: 0

[oracle] Oracle 存储过程 PROCEDURE

[复制链接]

1万

主题

1万

帖子

5万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
55105
发表于 2018-8-10 21:50:20 | 显示全部楼层 |阅读模式

存储过程
一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。  包含三部分:过程声明,执行过程部分,存储过程异常(可选)。
示例
  1. create or replace procedure sp_
  2. ( p_sResult out integer,--返回值 p_ID in number --ID
  3. )
  4. as v_id number(16); cursor v_chac_cr is select t.money from T001 t where t.sid=p_ID;--游标
  5. begin open v_chac_cr(); loop fetch v_chac_cr into v_id; exit when v_chac_cr%notfound; insert into F002(cnt) values (v_id); end loop; close v_chac_cr; commit; p_sResult:=1;
  6. exception--例外处理 when others then p_sResult:=0; rollback;
  7. end sp_;  
复制代码
项目运用  1.获取表下一个ID值
  1. CREATE OR REPLACE PROCEDURE PNEXTID
  2. ( tablename IN VARCHAR2 , idno OUT NUMBER
  3. )
  4. IS sqlstring VARCHAR2 ( 500 );
  5. BEGIN sqlstring := 'SELECT nvl(max(id),0)+1 FROM ' ||tablename; execute immediate sqlstring into idno; -- 动态执行 merge into tSequence a using ( select idno as ID, tablename as Name from dual) b --组合成表 merge into 确定表 on (upper(a.Name)=upper(b.Name)) --表名大写化 when matched then update set a.ID= case when b.ID >a.ID then b.ID else a.ID+ 1 end -- update; case when then else end; when not matched then insert (ID, Name ) values (b.ID,b.Name); --insert; select ID into idno from tSEQUENCE WHERE upper( name ) = upper(tablename);
  6. EXCEPTION WHEN OTHERS THEN idno := - 1 ;
  7. END pNextID;
复制代码
 2.返回列表数据(游标)
  1. CREATE OR REPLACE PROCEDURE SP_CONTENT ( o_result out types.cursorType, --结果集 ip_pwf in varchar2) --关联流程
  2. as /* --类型声明是游标变量 create or replace package TestPackage is type outlist is ref cursor; */ v_sql varchar2(1000); vn_count numeric(12,0); vn_num numeric(12,0); vn_id numeric(12,0); vs_table varchar2(30); vn_inst numeric(12,0);
  3. begin vn_count:=length(ip_pwf); vn_num:=instr(ip_pwf,'.'); vn_id:=to_number(substr(ip_pwf,1,vn_num-1)); vs_table:=substr(ip_pwf,vn_num+1,vn_count-vn_num); begin v_sql:='select nvl(max(job_code),0) from '||vs_table||' where company = '||vn_id||''; execute immediate v_sql into vn_inst; exception when others then vn_inst:=0; end; open o_result for select caller,enddate,content from tuser t where class_code < vn_inst;
  4. end SP_CONTENT;
复制代码
  
 



上一篇:使用jQuery快速高效制作网页交互特效——05 第五章 05 初识 jQuery
下一篇:Java之初学异常
该用户未在地球留下任何的痕迹

本版积分规则

QQ|小黑屋|帮助|IT技术擎 ( 沪ICP备15054863号  

GMT+8, 2018-10-18 10:46

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表