【规则-1】:存储过程的In、out参数应按类别分开书写,不要交叉。
例:
create or replace procedure sp_create_scp(
i_gsm_user_id number, --用户号码
i_order_code number, --命令代码
i_operation_type number, --工单类型
i_operating_srl number, --操作流水
o_operation_srl out number, --工单流水(返回参数)
o_flag out number , --成功 0 ,失败 1
o_msg out varchar2
)
begin
… …
end;
【规则-2】:存储过程中变量的声明应集中在is和begin关键字之间申明
例:
create or replace procedure sp_create_scp(
… …
)
is
… …
v_user gsm_user%rowtype; --用户信息
v_value varchar2(30);
nCnt number(5):=0;
nPriority number(2):=0;
begin
… …
end;
【规则-3】:尽可能使用相关表字段类型来定义相关的变量,如%type,%rowtype。
说明:一般变量,都可能会用于表的查询条件,或增加记录的值;当字段数据类型发生变更时,对应的变量无需修改。
例:
…
v_user gsm_user%rowtype; --用户信息
select * from gsm_user where gsm_user_id = v_user;
…
当gsm_usre_id的类型变成字符型时,该段代码无需修改。
【规则-4】:确保所有的变量和参数都用到,没有用到的变量和参数要删除。
【规则-5】:存储过程有多个分支返回时,若有事务控制,需确保各个分支都结束事务。
异常时,应该在Exception中捕捉异常,并进行事务处理。
【规则-6】:存储过程:不要在异常部分,进行正常的业务处理。
说明:从程序的易读性、易维护性考虑,不要在异常处理部分,包含正常的业务处理部分。
例:(不好的写法)
…
exception
When no_data_found then
--没有找到记录,则重新查找其他数据
Select * from
….
End;
【规则-7】:原则上不要使用动态 sql,如果必须使用,需绑定变量,
绑定变量写法:
QUERY_STRING :='select pr_template from bssp.bssp_process_template where process_id=:ora_process_id for update';
… …
EXECUTE IMMEDIATE QUERY_STRING INTO LOB USING 38880003;
【规则-8】:代码中的异常捕获返回结果,要加上Oracle的异常sqlerrm(Oracle的一个session级的全局变量)。
例:
exception
when others then
rollback;
oResult :=1;
oMsg := 'others'||substr(sqlerrm,200);
end;
【规则-10】:捕捉到异常后需要rollback回滚事务。
例:
exception
when others then
rollback;
oResult :=1;
oMsg := 'others'||sqlerrm;
end;