规范
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;