1.程序书写规范
1.1大小写风格
类 型 | 约 定 | 举 例 |
---|---|---|
保留字 | 大写 | BEGIN、DECLARE、ELSIF |
内置函数 | 大写 | SUBSTR、COUNT、TO_NUMBER |
预定义类型 | 大写 | NUMBER(7,2)、BOOLEAN |
SQL关键字 | 大写 | SELECT、INTO、WHERE |
数据库对象 | 小写 | 包括数据表、字段等 |
变量名 | 小写 | gv_dwhrbl |
1.2注释风格
注释总是加在程序的需要一个概括性说明或不易理解或易理解错的地方。注释应语言简炼、易懂而又准确。
1.2.1程序包的注释
- 在包的头部必须标明文件名称及其所完成的主要功能。
- 包的作者及完成时间。
- 包的状态:测试/未测试。
- 主要修改活动的修改人、时间、简单原因说明列表。
- 维护过程中需要修改程序时,应在被修改语句前面注明修改时间和原因说明。
举例:
/** 文件名:
* 功能描述:
* 作者:
*状态:(测试/未测试)
* 完成时间:
* 修改:时间 修改人 修改原因
*/
1.2.2过程、函数的注释
- 头部:必须进行功能和参数说明
- 主体部分:如算法复杂时,应以注释的方式对其算法结构作出说明
以下是头部的举例:
/** 功能描述:
* 作者:
*状态:(测试/未测试)
* 完成时间:
* 修改:时间 修改人 修改原因
*/
1.2.3语句的注释
- 注释单独成行、放在语句前面。
- 应对不易理解的分支条件表达式加注释;
- 不易理解的循环,应说明出口条件(有GOTO的程序还应说明入口条件);
- 对重要的计算应说明其功能;
- 过长的函数实现,应将语句按实现的功能分段加以概括性说明;
- 供别的文件或函数调用的函数,绝不应使用全局变量交换数据;
- 每条SQL语句均应有注释说明。
举例:
-- 从个人帐户表中查询满足条件的上年计入金额、本年计入金额、
-- 本年缴费月数等信息存入对应的变量中
SELECT snjrje,bnjrje,bnjfys,nd,bnjfjs,bnzhzf,bntczf
INTO ln_ snjrje,ln_ bnjrje,ln_ bnjfys,
ln_ nd,ln_ bnjfjs,ln_ bnzhzf,ln_ bntczf
FROM PsnAccount
WHERE shbzh = ivc_shbzh AND pid = ...;
UPDATE 表名
SET 字段名 = 变量名,字段名 = 变量名,...
WHERE 字段名 = 变量名 AND ...
INSERT INTO table_name( col1,col2,col3,col4,col5,...)
VALUES( V1,V2,V3,v4,v5,...)
1.2.4常量和变量的注释
注释说明放在常量和变量定义语句的后面,注释说明的要点是:
- 被保存值的含义(必须)
- 合法取值的范围(可选)
- 全局量需要对以上逐点做充分的说明。
注释的书写规范
- 可采用单行/多行注释。(– 或 /* */ 方式)
1.3缩进规则
1.3.1SQL语句的缩进风格
查询列表的书写风格(与注释综合考虑)
- 一行有多列,超过80个字符时,基于列对齐原则,建议采用下行缩进
SELECT col1,col2,...,
colm,coln,...
INTO v_col1,v_col2,...,
v_colm,...
WHERE 子句的书写规范
- 每个条件占一行
- 嵌套查询条件书写规范
WHERE con1
AND con2
AND col3 NOT IN ( SELECT col3 FROM t2 WHERE ......);
SET 子句的书写规范
- 每个表达式占一行。
SET col1 = v1,
col2 = v2,
...
1.3.2控制结构的缩进
程序应以缩进形式展现程序的块结构和控制结构。
-
下列保留字的下一行缩进三格: BEGIN、THEN、ELSE、ELSIF、LOOP
-
下列保留字所在行前移三格: END、ELSE、ELSIF、END IF、END LOOP
1.3.3缩进的限制
- 每次缩进标准为 3 个空格,不准使用 TAB 键。
- 建议任何一个程序最大行宽不超过80列,第一行续行语句缩进三格,后续续行语句与第一行续行语句对齐。
1.3.4其他
- 后台过程禁止使用COMMIT。在出错处理中可用ROLLBACK。
- 过程的输入/输出参数声明必须指定为’IN’或’OUT’,要与参数命名一致。特别,不能指定为’IN OUT’。
1.3.5范例
范例一
/** 文件名:jlgrzh.sql
*功能描述:该程序包主要用于人员新参保时帐户的处理
* 状态:未测试
* 作者:吴名
* 完成时间:2011/05/11
* 修改:2011/05/13,修改人:小李(所修改信息描述)
*/
CREATE OR REPLACE PACKAGE pkg_jlgrzh AS
/** 功能描述:对于新增,统筹范围外转入人员,新建个人帐户信息
* 作者:张三
*状态:未测试
* 完成时间:2011/05/12
* 修改: 修改人 修改原因
*/
PROCEDURE pro_xjgrzh (
pi_shbzh IN CHAR, --个人社会保障号
pi_dwsxh IN NUMBER, --单位顺序号
pi_cbrq IN DATE, --参保日期
po_fhz OUT NUMBER --返回值
);
/** 功能描述:对统筹范围外转入的参保人员,如实记载职工个人帐户
* 作者:张三
*状态:未测试
* 完成时间:2001/05/12
* 修改: 修改人 修改原因
*/
PROCEDURE pro_sjgrzh (
pi_shbzh IN CHAR, --个人社会保障号
pi_snjrje IN NUMBER, --上年计入金额
po_fhz OUT NUMBER --返回值
);
CREATE OR REPLACE PACKAGE BODY pkg_jlgrzh AS
PROCEDURE 过程名 (
参数1 IN 类型, --参数说明
参数2 IN 类型, --参数说明
参数1 OUT 类型 --参数说明
) IS
变量名 数据类型; --变量说明
BEGIN
--语句说明
语句;
长语句第一行
续行1
续行2;
语句;
IF 判断条件组合 THEN
--分支处理说明
语句;
ELSIF … THEN
语句;
ELSE
语句;
END IF;
FOR … LOOP
循环体;
END LOOP;
EXCEPTION
WHEN … THEN
例外处理语句;
END 过程名;
PROCEDURE pro_xjgrzh (
pi_shbzh IN CHAR, --个人社会保障号
pi_dwsxh IN NUMBER, --单位顺序号
pi_cbrq IN DATE, --参保日期
po_fhz OUT NUMBER --返回值
) IS
v_bz NUMBER; --标志
v_snjrje NUMBER; --上年计入金额
v_bnjrje NUMBER; --本年计入金额
v_bnjfys NUMBER; --本年缴费月数
BEGIN
SELECT snjrje, bnjrje,
bnjfys
INTO v_ snjrje,v_ bnjrje,
v_ bnjfys
FROM psnAccount
WHERE PID = pi_shbzh;
--生成个人帐户记录
INSERT INTO table_name
( col1,col2, --
col3,...) --
VALUES
( 变量1, 变量2, --
变量3,...); --
...
EXCEPTION
WHEN OTHERS THEN
po_fhz := -10110.9;
END proc_xjgrzh;
...
END pkg_jlgrzh;