PLSQL编码规范_第1页
PLSQL编码规范_第2页
PLSQL编码规范_第3页
PLSQL编码规范_第4页
PLSQL编码规范_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、pl/sql 编码规范第1页/共11页pl/sql编码规范pl/sql 编码规范第2页/共11页1. pl/sql 编码规范pl/sql 对大小写不敏感,故切忌使用大小写区分变量和其它用户定义的元素。为使代码具有可读性,可遵循以下简单的大小写规则以便在源代码中区分这些元素:全部保留字、 oracle 提供的程序包、内建函数、用户定义的常数、oracle 和用户定义的数据类型,以及模式名均采用大写;所有程序命名和过程名称全部采用大写。修改前必须从cvs 去取最新的版本去,同时如存在多个人同时修改的情况,请注意协调分工,注意事后合并版本。所有的包和过程等pl/sql 脚本,请将最新的放在cvs 上

2、, 这个目录下。(function 和 package 等要分开放)文件的路径如下图片所示如果是改修的,请到下图的baseline 下去取文件 ,然后保存到上述路径:pl/sql 的包和包体将采用一个文件,名称为包的名字,保留到 cvs 将,请不要将包和包体分开为两个文件update 到 cvs。在提交到cvs 上去以前,请清理掉临时的变量,和编码的时候采用的临时表等,并请格式化你的代码,不定期将会对代码进行review。pl/sql 编码规范第3页/共11页1.1. pl/sql程序命名规范1.无论是 pl/sql 对象还是pl/sql 对象内部用的变量和游标等,都必须能从名称上能让人理解变

3、量和游标的含义,而且一定要做好注释。2.传到 cvs 上的文本文件全部采用 .sql 作为文件名的后缀1.1.1. 存储过程存储过程的命名必须符合usp_detailname格式, 其中 usp表示是存储过程, detailname是与存储过程意义相关的意义的名称,如:usp_business_rule。1.1.2. 软件包软件包的命名必须符合pkg_ detailname 格式,其中 pkg表示是软件包, detailname是与软件包意义相关的意义的名称,例如:pkg_sorce_all。1.1.3. 触发器触发器的的命名必须符合trg_detailname 格式,其中trg表示是触发器,

4、detailname是与触发器用途相关的意义的名称,具体可以参考已有的trigger 对象。1.1.4. 函数函数的命名必须符合fnc_detailname格式,其中fnc表示是函数,detailname 是与函数意义相关的意义名称,例如:fnc_salarycount。1.1.5. 变量&游标1.变量的命名必须符合规约, 请采用 ” xxx_variablename ”开头 , 其中 xxx表示变量的类型。variablename表示变量名,如为函数传入参数请根据传入类型加上in,out,inout 等,如: in_num_cust_code. 2.如果依据表的字段请采用%type

5、或者 %rowtype 方式。请不要直接定义变量。如: num_cust_code tablename.cust_code%type 3.显示游标请采用” cur_ ” 开头,在代码开头请说明,同时说明游标的定义. 如: cur_cust_info pl/sql 编码规范第4页/共11页4.所有的变量前必须带上变量类型的标志,number 型采用 num,varcahr2 采用 var ,而在函数等入口的传入方法 in_var_cust_name,out_num_code,inout_num_code的方式来区分变量的类型是否位in,out,inout 类型5.不能超过30 个字符,不能采用关

6、键字,要以字母开头。注: 以上命名规则将主要在于新建对象时使用,如果在原有的pl/sql对象的基础上修改,请按照原来代码的命名规范,注意做好代码的注释。同时必须在pl/sql代码开头,做好注释说明。1.2. pl/sql编码规范pl/sql 的编码规范包括:注释变量命名书写格式逻辑分支循环处理1.2.1 注释1 请在所有程序一开始处严格按如下格式写出注释块:- * - 过程名:- 功能描述:- 输入参数说明:- 输出参数说明:- 调用的过程或函数:- 被哪些过程或函数调用:- 创建人员:- 创建日期:- 修改人员:- 修改日期:- 修改原因:- 修改结果:- 版本说明:- 引用对象 : - *

7、 2 通常在 pl/sql块的 declare ,begin ,exception和 end 部分设置分隔线和注释;3 每个变量都需要加上变量的注释,说明变量的用途;4 请在重要的程序段和难懂的程序段加上分隔线和注释;5 请注明游标等的用途和用法6注释量与程序量的总比例尽量做到1 :1。pl/sql 编码规范第5页/共11页1.2.2 变量取名及含义变量取名请遵守命名规范,对使用频繁、关键变量,为了便于阅读和修改,请在定义时加上注释标明其含义。为了便于阅读和调试,尽量少用单字母变量,禁止使用诸如i 、l 等作为变量名,同时注意小写字母l 和数字 1 之间的区别使用。并严禁使用关键字,要符合 o

8、racle 的命名规范。1.2.3 对现有程序的修改1.删除 在删除代码前后上/*deleted by yourname on yyyy/mm/dd start*/和/*deleted by yourname on yyyy/mm/dd end*/ 同时请注明删除的原因。2.修改将原有的代码全部注释(删除)掉,在最后说明注释的原因,同时将你新增加的代码写在注释后,首先加上/*modified by yourname on yyyy/mm/dd start*/和/* modified by yourname on yyyy/mm/dd end*/ 需要保证a.所有被注释的代码都是原来的代码b.所

9、有没有被注释的代码都是新增加的代码3.增加,在增加的代码前加后/*added by yourname on yyyy/mm/dd start*/和 /*added by yourname on yyyy/mm/dd end*/ 同时请注释说明,增加的原因等。为了便于阅读和调试,尽量少用单字母变量,禁止使用诸如i 、l 等作为变量名,同时注意小写字母l 和数字 1 之间的区别使用。请注意, 必须在 pl/sql代码的开头处, 详细说明你所做的修改,包括修改了那些地方,修改的原因,修改的日期,修改人等。1.2.4 书写格式1用语句分层缩进的写法显示嵌套结构的层次;2在注释段与程序段、以及不同程序段

10、插入空行;3每行只写一条语句。1.2.5 逻辑分支逻辑分支的格式如下:if thenelse pl/sql 编码规范第6页/共11页end if; choose case case 1 case 2 case else case end;1.2.6 循环处理循环处理的格式如下:for loopend loop; while loop end loop; declare cursor cursor_name is (sql statement for ther cursor) begin for variable_name in cursor_name loop (statement) end

11、loop; end 1.2.7 游标处理游标的本身就是一个sql的工作区, 用于处理多行或单行的查询处理,主要分为如下两类1.implicit cursor由 dml和 pl/sql的 select 隐式的定义, 不能使用fetch,open,colse等来控制sql游标,但可以使用游标的属性, 如 select xxx into xxx from xxx. 2.explicit cursor主要由程序控制, 用于显示返回一行或者多行数据。执行的四个步骤:1. 声明:定义游标的名字和结构,select 中可以使用order by 2. 打开游标:执行查询同时绑定所有涉及到的变量执行的内容:为

12、select 分配内存并分析select语句绑定输入的变量pl/sql 编码规范第7页/共11页配置指针在活动集的第一行注意: 如果查询不返回结果,不会引发pl/sql的异常, 你可以在执行fetch后测试返回的结果如果游标内的声明包括update 。一样会执行行锁定3.fetch :把当前行的值赋给变量,每个fetch都会把游标指针向下移动一行。如果到了最后一行就会自动退出for loop 4. 关闭:释放活动的集,可以再次使用open 游标的几个属性: sql%rowcount 受最近执行的sql语句影响的行的数目。 (一个整数值)sql%found boolean 属性,如果最近的sql

13、语句影响了一行或多行,其值为true 。sql%notfound boolean属性,如果最近的sql语句没有影响任何行,其值为true 。sql%isopen 总是为 false ,原因是pl/sql总是它们结束执行后立即关闭内隐游标。例子eg1:常规用法cursor c1 is select empno, ename from emp; emp_record c1%rowtype; begin open c1; . . . fetch c1 into emp_record;eg2:使用 for循环实现游标declare cursor c1 is select empno, ename fr

14、om emp; emp_record c1%rowtype; begin for emp_record in c1 loop - implicit open and implicit fetch occur if emp_record.empno = 7839 then . end loop; - implicit close occurs end; 游标 for循环不需要fetch 语句的。游标打开,在循环中每次重复提取一行,所有的行都处理后,游标会自动关闭。eg3:不定义游标的方式begin pl/sql 编码规范第8页/共11页 for emp_record in ( select em

15、pno, ename from emp) loop - implicit open and implicit fetch occur if emp_record.empno = 7839 then . end loop; - implicit close occurs end; eg1:带变量的游标你必须指定指定参数的数据类型,但不用指定大小declare cursor c1 (v_deptno number, v_job varchar2) is select empno, ename from emp where deptno = v_deptno and job = v_job; beg

16、in open c1(10, clerk); . eg5:for update-当加上 for update则把整个表或字段锁住了。 select . from . for update of column_referencenowait declare cursor c1 is select empno, ename from emp for update nowait; nowait: 返回一个oracle的错误信息如果此行给其他的会话锁住了。eg6 :where current of 用于在游标中删除和更新当前行必须使用 forupdate 去锁住行使用 where current of

17、去指向当前的行declare cursor c1 is select . for update nowait; begin . for emp_record in c1 loop update . where current of c1; pl/sql 编码规范第9页/共11页 . end loop; commit; end; 1.2.8 异常处理pl/sql 的异常主要分为三大类1.predefined exception 异常2.non-predefined exception异常3.user defined exception 异常其中 1,2 将隐式 raised ,3 需要显示 ra

18、ised 如下例子predefined exception begin select . commit; exception when no_data_found then statement1; statement2; when too_many_rows then statement1; when others then statement1; statement2; statement3; end; . non-predefined exception declare e_products_invalid exception; pragma exception_init ( e_prod

19、ucts_invalid, -2292); v_message varchar2(50); begin . . . exception when e_products_invalid then :g_message := product code specified is not valid.; . . . end; user-defined exception pl/sql 编码规范第10页/共11页declare e_amount_remaining exception; . . . begin . . . raise e_amount_remaining; . . . exception when e_amount_remaining then :g_message := there is still an amount in stock.; . . . end; raise_application_error declare .invalidpart exception; begin . if sql%notfound then raise invalidpart; end if; exception when invalidpart then raise_application_error(-20003,invalid part id #|

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论