Oracle存储过程编码规范.docx
- 文档编号:30727694
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:10
- 大小:20.18KB
Oracle存储过程编码规范.docx
《Oracle存储过程编码规范.docx》由会员分享,可在线阅读,更多相关《Oracle存储过程编码规范.docx(10页珍藏版)》请在冰豆网上搜索。
Oracle存储过程编码规范
Oracle存储过程编码规范
版本号:
3.0
目录
1.目的1
2.名词解释与定义1
3.规范内容1
3.1.命名规范1
3.2.注释信息3
3.3.错误处理4
3.4.其它规范6
4.过程应用指南8
4.1.剪裁8
4.2.使用指南8
1.目的
规范项目SP代码的编写,保证程序风格的同一性和一致性。
2.名词解释与定义
无
3.规范内容
3.1.命名规范
3.1.1.存储过程名称
采用“p+模块名一位缩写+功能描述”的格式命名;如p_YWRTJOB。
3.1.2.存储过程的输入输出参数
存储过程根据需要自行决定参数的数目、类型和长度;
对于需要提交给任务管理器调用的存储过程,为了保证任务管理器的统一调度;需要用另外一个存储过程进行封装,该封装sp的输入参数采用i_parm命名,输出变量采用o_parm来命名,类型为varchar2(80),如长度需要超过80,提交讨论,原则不应大于200。
只能有一个输入和一个输出参数,输出参数的第一位是‘O’(OK)或者‘E’(ERROR),第2位开始开始直接写错误信息(如果正确返回,从第2位开始可以写返回信息,内容不作要求),用该sp来调用具体实现业务操作的存储过程。
3.1.3.变量的命名
所有的变量采用格式为:
变量前缀_变量描述。
一般变量的前缀使用类型的缩写:
NCHAR:
nc
CHAR:
c
VARCHAR2:
vc
NVARCHAR2:
nvc
NUMBER:
n
DATE:
d
ROWID:
rid
UROWID:
urid
BINARY_INTEGER:
bi
PLS_INTERGER:
pi
BOOLEAN:
b
BLOB:
blb
CLOB:
clb
NCLOB:
nclb
BFILE:
bfl
例如:
vc_StnName、n_FlightDate。
游标变量:
前缀为cur。
存放游标记录集。
记录型变量:
前缀为rec。
存放记录型数据。
表类型变量:
前缀为tab。
存放表类型数据。
3.1.4.参数的命名
参数命名规范为:
参数方向缩写_变量名。
参数方向缩写的缩写如下:
IN:
i
OUT:
o
INOUT:
io
例如:
i_n_FlightDate
o_vc_AgentID
注意:
需要被作业管理调用的封装过的存储过程,其参数是已经规定好的,不遵循本命名规范。
3.2.注释信息
3.2.1.开头注释
----------------------------------------------------------------------------------------------------------
----
--PROCEDURENAME:
SALMCH(SAMPLE)--
--NAMEINSYSMTH:
SALMCH--
----
--DESCRIPTION:
SQLPROCEDURETEMPLATE--
--FORNEWDOMESTICDEVELOPMENT--
--INVOKE:
NONE--
--TYPE:
BATCH/SCH/ONLINE--
----
--PROGRAMMEDBY:
ARKDATE2004/04/09--
--MODIFIEDBY:
ARKDATE2004/04/10--
--MODIFIEDBY:
ARKDATE2004/05/09--
----
--COPYRIGHT1997~2005ACCA-ARKO--
----
-----------------------------------------------------------------------------------------------------------
说明:
PROCEDURENAME:
见前面命名规范;
NAMEINSYSMTH:
指出该存储过程在作业控制表中的对应名称;
DESCRIPTION:
存储过程功能说明;
INVOKED:
此存储过程调用了哪个(些)存储过程,“NONE”表示此存储过程没有调用其它程序,空白表示还不确定;一般地,当程序编写、测试完毕,这个地方不允许为空白;
PROGRAMMEDBY:
存储过程编写人员,及编写日期;
MODIFIEDBY:
存储过程修改人员及修改日期,可写多行;
TYPE:
程序的类型,分为三种:
批处理、自动作业、联机调用,英文分别为BATCH\SCH\ONLINE;
自动作业:
所有自动作业的头程序是自动作业类型;
批处理:
提交给作业管理器进行管理的异步作业是批处理类型;
联机调用:
其他后台程序都是联机调用类型,如前台直接调用的程序,后台间调用的非主程序和非头程序。
3.2.2.变量初始化
例:
vc_Prfvarchar2(4)DEFAULT‘’;
n_TKTnumber(7,0)DEFAULT0;
vc_BTHNUMvarchar2(11)DEFAULT‘’;
3.2.3.程序主体
如果调用SP程序:
调用某一个程序之后,检查执行的成功标志,如果成功,继续执行;
如果失败,应将被调用程序的输出参数赋给当前程序的输出参数(有事务的要回滚),程序退出;当是其他值时,应特殊处理这些特定的错误,或退出或继续处理或回滚。
3.2.4.程序主体的注释
注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,太少不利于代码理解,太多则会对阅读产生干扰,因此只在必要的地方才加注释,而且注释要准确、易懂、尽可能简洁。
注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面。
对于所有的变量、数据结构声明,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其含义。
对重要代码段的功能、意图进行注释,提供有用的、额外的信息。
并在该代码段的结束处加一行注释表示该段代码结束。
维护代码时,要更新相应的注释,删除不再有用的注释。
保持代码、注释的一致性,避免产生误解。
3.3.错误处理
3.3.1.存储过程的异常处理的原则
在程序的最后要写exception来处理异常。
3.3.2.程序成功处理(必须)
所有存储过程都必须返回成功标志,对于由作业管理器调用的sp,只有一个返回参数,返回参数的第一位赋为’O’,第2-5位统一0000,表示“程序执行成功”,第6-80位其它返回参数,进行其它所需操作,同时程序退出。
3.3.3.特定错误处理(可选)
特定错误是指错误是已知的,可预知的,一般反映的是业务逻辑的错误。
1.对于由作业管理器调用的sp(只有一个传入参数i_parm和一个返回参数o_parm)自定义返回参数第一位,第2-5位为自定义的4位序号(要在表SYSMSG中查找和注册),4位序号定义不同的中文描述,同时组合其它返回参数在6-80,
2.进行其它所需的业务要求的操作。
3.回滚事务,使用ROLLBACK。
4.程序退出。
3.3.4.异常处理(必须)
1.采用声明异常过程来处理,
2.对于由作业管理器调用的sp,其返回参数第一位赋为’E’,第2-5位为统一的0001,表示“程序执行异常”,第6-80位推荐跟相应的异常详细信息;其他的sp可以定义输出参数来传递程序异常信息。
3.出异常时必须根据出错信息写日志文件,该步骤通过调用SYWRTLOG程序来实现。
p_ycallwrtlog的第一个参数写存储过程名称,最后一个参数是输出参数。
其中第三个参数是当前存储过程的输入参数(如票号),可能有同事输入参数是record或者cursor什么,请选择其中重要部分记录,注意第三位的长度最大允许长度为500。
exception
whenothersthen
p_ycallwrtlog('P_CUIADD',sqlcode||sqlerrm,i_vc_prf||'|'||i_n_cpn||'|'||i_vc_frm||'|'||i_vc_tkt||'|'||i_vc_flag,o_vc_returnflag);
有关作业:
如果作业调用的是存储过程,可能由于统一commit导致运行过程中无法读取作业进度,这种情况请调用P_YWRTJOBGAG(i_n_dateinnumber,i_n_timeinnumber,i_vc_nameinvarchar2,i_n_gaginnumber)或P_YWRTJOBGAGSIMPLE(i_vc_nameinvarchar2,i_n_gaginnumber)来写作业进度,后一个存储过程仅适用于自我互斥(只允许同时运行一个)的作业。
这两个存储过程使用自治事务。
4.回滚事务,使用ROLLBACK。
5.然后,程序退出。
3.4.其它规范
3.4.1.回滚操作说明
这里的回滚操作,即在事务处理中,使允许此存储要么被成功执行,要么什么都没做。
●在编写存储过程时,可以显示使用COMMIT和ROLLBACK进行事务的控制,推荐在存储过程中使用事务处理。
3.4.2.调用后台程序的参数处理及其他约定
3.4.2.1联机调用程序
即等待系统响应返回结果的程序。
●通过一个DRAS2005.DATA.DATAACCESS类中的函数ExecuteProcedure来调用所有后台联机程序。
参数有“程序名,输入参数,输出参数。
”
3.4.2.2批处理程序
异步调用后台程序,即提交一个作业。
●存储过程可能返回的参数头五位为“O0000”、”E0001”、“?
?
?
?
?
”,?
表示自定义代码。
●批处理程序统一被作业管理器控制和运行。
●由于响应时间要求不高,作业管理器在处理返回值时,可以从SYSMSG中取出相应的中文描述,同原有的返回值复合形成作业的返回值。
●所有批处理程序必须在SYSMTH中注册,具体内容见下面的规范。
●通过一个DRAS2005.DATA.类中的函数ADDJOB来提交批处理作业,参数有“作业标示,输入参数,提交用户”
3.4.2.3自动作业
自动作业是指可由用户定义定时运行的批处理作业。
●任何自动作业都对应一个批处理程序,存储过程除调用一个批处理程序外,然后还将调用sywrtjob写入sysjob中该作业的状态信息和出错信息。
●所有自动作业头程序必须在SYSMTH中注册,具体内容见下面的规范。
●自动作业通过前台界面进行设置和提交。
3.4.2.4其他规范
●日期转换说明:
由于数据库定义时日期格式为YYYYMMDD的数值型,需要将时间转换成数值类型,参照以下取系统时间的范例:
selectto_char(sysdate,'yyyy-mm-ddhh24:
mi:
ss')intovc_datefromdual;
vc_time:
=substr(vc_date,12,8);
vc_day:
=substr(vc_date,1,4)||substr(vc_date,6,2)||substr(vc_date,9,2);
●对于长时间的批处理程序,可以考虑调用sywrtbar,使得用户可以了解程序执行的进程。
●所有存储过程都保存在数据库上和VSS各一份,顺序是先在数据库中保存,再放入VSS进行控制;
●SYSMTH注册规范:
目前手工注册,以后利用运行环境的界面进行注册。
1)每一个需要作业管理器管理的SYSMTH中注册,从而避免在程序中HARDCODE.
2)包括三种类型的作业:
批处理程序BATCH,自动作业SCH,前台程序DOTNET。
3)SYSMTH需要注册的内容:
YMTNAM:
作业标示,10位,记录作业名的标示,主键,作业提交时使用,一般可以同程序名相同,或模块名+含义缩写。
YMTDCP:
作业描述,80位,40个中文,如:
销售校验处理程序。
YMTPGM:
程序名,30位,实际调用的头程序名。
(应写实际封装后的程序名)
YMTCLA:
前台程序使用的类名。
YMTSTS:
作业类型:
BATCH,SCH,DOTNET.
YMTUSR:
程序人员
YMTTYP:
要提交的队列名。
共有12个,DRAS+模块名+Q。
YMTIND:
注册时间
YMTLSR:
修改人员
YMTLCD:
修改时间
●程序SYWrtlog、SYWrtjob、SYWrtbar的调用说明如下:
SYWRTJOB:
自动作业的头程序中需要。
输入参数:
varchar2(200),
1-8程序开始日期
9-16程序开始时间
17-46 作业标示名
47-54 作业运行队列名称。
(DRASXXXQ,XXX为模块名。
)
55-134输出参数,异常/其他描述:
必须传入自动作业头程序调用的程序的输出参数。
136-200空
SYWRTLOG:
输入参数:
varchar2(200),
1-30程序名称(要硬编码)
31-110错误描述(按照例程是将SQLSTATE和错误信息连接起来,最好和输出参数的后75位共用)
111-200空
SYWRTBAR:
输入参数:
varchar2(80)
1-30作业标示名
31-33程序进程(0-100)
所有输出参数可为空格。
4.过程应用指南
剪裁
编码过程的所有活动均不能剪裁。
使用指南
(1)编码规范的范围
适用于企业所有Oracle系列数据库SP程序的软件开发工作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 存储 过程 编码 规范