PLSQL编码规范

  • 格式:doc
  • 大小:136.50 KB
  • 文档页数:11

PL/SQL 编码规范

第1页/共11页 PL/SQL编码规范 PL/SQL 编码规范

第2页/共11页

1. PL/SQL编码规范

PL/SQL对大小写不敏感,故切忌使用大小写区分变量和其它用户定义的元素。为使代码具有可读性,可遵循以下简单的大小写规则以便在源代码中区分这些元素:

 全部保留字、Oracle提供的程序包、内建函数、用户定义的常数、Oracle和用户定义的数据类型,以及模式名均采用大写;

 所有程序命名和过程名称全部采用大写。

 修改前必须从CVS去取最新的版本去,同时如存在多个人同时修改的情况,请注意协调分工,注意事后合并版本。

 所有的包和过程等PL/SQL脚本,请将最新的放在CVS上,

\JCN\20Engineering\20.40SourceCode\PLSQL\这个目录下。

(FUNCTION和PACKAGE等要分开放)

文件的路径如下图片所示

如果是改修的,请到下图的Baseline下去取文件,然后保存到上述路径:

 PL/SQL的包和包体将采用一个文件,名称为包的名字,保留到CVS将,请不要将包和包体分开为两个文件update到CVS。

 在提交到CVS上去以前,请清理掉临时的变量,和编码的时候采用的临时表等,并请格式化你的代码,不定期将会对代码进行review。

PL/SQL 编码规范

第3页/共11页 1.1. PL/SQL程序命名规范

1. 无论是PL/SQL对象还是PL/SQL对象内部用的变量和游标等,都必须能从名称上能让人理解变量和游标的含义,而且一定要做好注释。

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表示是触发器,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或者%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个字符,不能采用关键字,要以字母开头。

注: 以上命名规则将主要在于新建对象时使用,如果在原有的PL/SQL对象的基础上修改,请按照原来代码的命名规范,注意做好代码的注释。同时必须在PL/SQL代码开头,做好注释说明。

1.2. PL/SQL编码规范

PL/SQL的编码规范包括:

 注释

 变量命名

 书写格式

 逻辑分支

 循环处理

1.2.1注释

1. 请在所有程序一开始处严格按如下格式写出注释块:

-- *******************************************

-- 过程名:

-- 功能描述:

-- 输入参数说明:

-- 输出参数说明:

-- 调用的过程或函数:

-- 被哪些过程或函数调用:

-- 创建人员:

-- 创建日期:

-- 修改人员:

-- 修改日期:

-- 修改原因:

-- 修改结果:

-- 版本说明:

-- 引用对象:

-- *******************************************

2. 通常在PL/SQL块的declare,begin,exception和end部分设置分隔线和注释;

3. 每个变量都需要加上变量的注释,说明变量的用途;

4. 请在重要的程序段和难懂的程序段加上分隔线和注释;

5. 请注明游标等的用途和用法

6.注释量与程序量的总比例尽量做到1 :1。 PL/SQL 编码规范

第5页/共11页 1.2.2变量取名及含义

变量取名请遵守命名规范,对使用频繁、关键变量,为了便于阅读和修改,请在定义时加上注释标明其含义。

为了便于阅读和调试,尽量少用单字母变量,禁止使用诸如i、l等作为变量名,同时注意小写字母l和数字1之间的区别使用。并严禁使用关键字,要符合ORACLE的命名规范。

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. 所有没有被注释的代码都是新增加的代码

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.在注释段与程序段、以及不同程序段插入空行;

3.每行只写一条语句。

1.2.5逻辑分支

逻辑分支的格式如下:

 IF……THEN

……

ELSE

…… PL/SQL 编码规范

第6页/共11页 END IF;

 CHOOSE CASE

CASE 1 …

……

CASE 2 …

……

CASE ELSE …

……

CASE END;

1.2.6循环处理

循环处理的格式如下:

 FOR …… LOOP

……

END 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 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.打开游标:执行查询同时绑定所有涉及到的变量

执行的内容:

为select 分配内存并分析select语句

绑定输入的变量 PL/SQL 编码规范

第7页/共11页 配置指针在活动集的第一行

注意:如果 查询不返回结果,不会引发PL/SQL的异常,你可以在执行fetch后测试返回的结果

如果游标内的声明包括update。一样会执行行锁定

3.Fetch:把当前行的值赋给变量,每个fetch都会把游标指针向下移动一行。

如果到了最后一行就会自动退出for loop

4.关闭:释放活动的集,可以再次使用open

游标的几个属性:

SQL%ROWCOUNT 受最近执行的SQL语句影响的行的数目。(一个整数值)

SQL%FOUND Boolean属性,如果最近的SQL语句影响了一行或多行,其值为

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

FROM emp;

emp_record c1%ROWTYPE;