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;
原文地址:https://www.cnblogs.com/cnblogs-syui/p/12511120.html