ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 编写电子书包平台所有表主键之存储过程_sp_stored procedure

编写电子书包平台所有表主键之存储过程_sp_stored procedure

原创 Linux操作系统 作者:wisdomone1 时间:2010-06-26 15:28:14 0 删除 编辑
#有了一点写存储过程的思路,花几个小时,人真笨
declare
v_max_id number;
begin
select max_id into v_max_id from t_max_id where tname='&table';
update t_max_id set max_id=v_max_id+1;      
commit;
exception when no_data_found then
v_max_id:=1;
insert into t_max_id values('&table',v_max_id);
commit;
end;
/
PL/SQL procedure successfully completed.
#######建立测试表
SQL> desc t_max_id;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TNAME                                              VARCHAR2(30)
 MAX_ID                                             NUMBER
SQL>
 
 
#########生成pd电子书包平台所有表主键的存储过程
create or replace procedure p_get_table_max_pk(v_table_name varchar2,v_out_max_id out number)
is
v_max_id number;
begin
 select max_id into v_max_id from t_max_id where tname=v_table_name;
 update t_max_id set max_id=v_max_id+1 where tname=v_table_name;
 commit;
 v_out_max_id:=v_max_id+1;
 exception when no_data_found then
   v_max_id:=1;
   insert into t_max_id values(v_table_name,v_max_id);
   v_out_max_id:=v_max_id;
   commit;
end;
/
 
小结;
      1,异常要写在plsql代码块的最后,而不是最前面
       2,out输出的参数,在plsql代码块中:比如:v_out_max_id同时要在正常处理逻辑与异常处理逻辑两处进行 v_out_max_id:=某个变量或什么值  的操作;
       3,在sqlplus中调用存储过程及显示输出参数out为如下方法
SQL> var a number   #定义与存储过程out输出 参数对应的变量
SQL> exec p_get_table_max_pk('t1',:a);#执行存储过程
PL/SQL procedure successfully completed.
SQL> select * from t_max_id;
TNAME                              MAX_ID
------------------------------ ----------
t1                                      2
SQL> print a;#显示输出变量值
         A
----------
         2

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-666388/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12690169