Oracle 存储过程 PROCEDURE
程序员文章站
2022-07-07 20:28:49
存储过程 一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。 包含三部分:过程声明,执行过程部分,存储过程异常(可选)。 示例 项目运用 1.获 ......
存储过程
一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
包含三部分:过程声明,执行过程部分,存储过程异常(可选)。
示例
create or replace procedure sp_ ( p_sResult out integer,--返回值 p_ID in number --ID ) as v_id number(16); cursor v_chac_cr is select t.money from T001 t where t.sid=p_ID;--游标 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; exception--例外处理 when others then p_sResult:=0; rollback; end sp_;
项目运用
1.获取表下一个ID值
CREATE OR REPLACE PROCEDURE PNEXTID ( tablename IN VARCHAR2 , idno OUT NUMBER ) IS sqlstring VARCHAR2 ( 500 ); 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); EXCEPTION WHEN OTHERS THEN idno := - 1 ; END pNextID;
2.返回列表数据(游标)
CREATE OR REPLACE PROCEDURE SP_CONTENT ( o_result out types.cursorType, --结果集 ip_pwf in varchar2) --关联流程 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); 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; end SP_CONTENT;
上一篇: 我有话给你的乖女婿说
下一篇: 始终不太安全
推荐阅读
-
MySQL能否授予查看存储过程定义权限给用户
-
mssql server 存储过程里,bulk insert table from '路径+文件',路径固定,文件名不固定的实现方法
-
DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)
-
编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
-
编程开发之--Oracle数据库--存储过程和存储函数(2)
-
mssql sqlserver存储过程专题
-
sql server 查询某个表被哪些存储过程调用
-
Oracle存储过程入门学习基本语法
-
Oracle存储过程之数据库中获取数据实例
-
python连接mysql调用存储过程示例