Oracle存储过程、包的开发
规范
1 create or replace procedure_name 2 ( 3 --参数:argument,根据参数类型命名,如number就是an_...,date就是ad_... 4 ad_data_date in date, 5 --使用表名.列名定义参数类型 6 P_id table.id%type 7 ) 8 is 9 --变量:variable,number就是vn_... 10 begin 11 --业务处理 12 commit; 13 14 exception 15 when others then 16 ai_code := sqlcode; --oracle自带的函数,返回Oracle错误的序列 17 ai_desc := substr(sqlerrm,1,1000); --返回错误消息 18 --错误处理,一般写日志 19 rollback; 20 end; 21 end;
结合package、计算控制procedure、log_procedure使用
1 create or replace package body pkg_name is 2 --procedure_1 3 prc_log 4 ( 5 ac_prc_name in varchar2, --过程名 6 ad_bgn_date in date, --开始时间 7 ad_end_date in date, --结束时间 8 ac_res_code in varchar2, --结果代码 9 ac_res_desc in varchar2, --结果描述 10 ac_remark in varchar2 --备注 11 ) 12 is 13 begin 14 insert into log_table(columns) values (...); 15 commit; 16 17 exception 18 when others then 19 rollback; 20 end; 21 22 --procedure_2 23 prc_name 24 ( --参数 25 an_data_date in number, --数据时间 26 an_code out number, --执行结果代码 27 av_desc out varchar2 --执行结果描述 28 ) is 29 --变量 30 vd_bgn_date date; 31 vd_end_date date; 32 begin 33 vd_bgn_date := sysdate; 34 --业务处理 35 36 an_code := 0; 37 av_desc := '执行成功'; 38 select sysdate into vd_end_date from dual; 39 40 --写日志 41 prc_log(prc_name,vd_bgn_date,vd_end_date,an_code,av_desc,'备注'); 42 commit; 43 44 exception 45 when others then 46 --sqlcode 47 an_code := sqlcode; 48 --sqlerrm 49 av_desc := substr(sqlerrm,1,1000); 50 vd_end_date := sysdate; 51 rollback; 52 --写日志 53 prc_log(prc_name,vd_bgn_date,vd_end_date,an_code,av_desc,'备注'); 54 commit; 55 end; 56 57 --计算控制 58 procedure prc_ctl 59 ( 60 ad_date in date, 61 an_code out number, 62 av_desc out varchar2 63 ) 64 is 65 --变量 66 vd_data_date varchar2; --数据时间,执行的条件 67 vd_bgn_date date; 68 vd_end_date date; 69 begin 70 vd_bgn_date := sysdate; 71 if ... then 72 --业务处理,调用存储过程 73 prc_name(vd_data_date); 74 else ... 75 end if; 76 77 an_code := 0; 78 av_desc := '执行成功'; 79 vd_end_date := sysdate; 80 81 --log 82 prc_log('prc_ctl',vd_bgn_date,vd_end_date,an_code,av_desc,'备注'); 83 commit; 84 85 exception 86 when others then 87 an_code := sqlcode; 88 av_desc := substr(sqlerrm,1,1000); 89 vd_end_date := sysdate; 90 rollback; 91 --log 92 prc_log('prc_ctl',vd_bgn_date,vd_end_date,an_code,av_desc,'备注'); 93 commit; 94 end; 95 end;