plsql 书写命名规范

俗话说事不预则废,无规矩不成方圆。

对sql脚本程序的设计,个人认为应该是从编码规范开始。

前段时间公司一些同事提交的脚本,风格迥异,让我审核起来倍感难受,丝毫没有审核代码的快感。

特整理了公司部分常规的编码规范,对新人进行了培训,希望同志们写的代码更美观和高效(注:规范部分收集于网络,感谢网络大虾们的贡献):

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

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 。

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逻辑分支

逻辑分支的格式如下:

l         IF……THEN
    ……
ELSE
    ……
END IF;

l        CHOOSE   CASE
     CASE 1  …
             ……
     CASE 2 …
            ……
     CASE ELSE  …
            ……
CASE END;

1.2.6循环处理

循环处理的格式如下:

l         FOR …… LOOP
 ……
END LOOP;

l         WHILE ……LOOP
   ……  
END LOOP;

l         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 的异常,你可以在执行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;

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

FOR emp_record IN ( SELECT empno, 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;

BEGIN

OPEN c1(10, ‘CLERK‘);

...

EG5:FOR UPDATE---- 当加上for update 则把整个表或字段锁住了。

SELECT    ... FROM        ...

FOR UPDATE [OF column_reference ][NOWAIT]

DECLARE

CURSOR c1 IS

SELECT empno, ename

FROM   emp

FOR UPDATE NOWAIT;

NOWAIT: 返回一个oracle 的错误信息如果此行给其他的会话锁住了。

EG6 :WHERE CURRENT OF

用于在游标中删除和更新当前行

必须使用 FORUPDATE 去锁住行

使用WHERE CURRENT OF 去指向当前的行

DECLARE

CURSOR c1 IS

SELECT ...

FOR UPDATE NOWAIT;

BEGIN

...

FOR emp_record IN c1 LOOP

UPDATE ...

WHERE CURRENT OF c1;

...

END LOOP;

COMMIT;

END;

 

1.2. 8 异常处理

PL/SQL 的异常主要分为三大类

1.     Predefined Exception 异常

2.     Non-Predefined Exception 异常

3.     User Defined Exception 异常

其中1,2 将隐式raised ,3 需要显示raised

如下例子

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_products_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

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 #’||  partnum);

WHEN OTHERS THEN

Raise_application_error(-20000,errNum||errMsg);

END

²        使用EXCEPTION 关键字在一个PL/SQL 块的声明部分声明用户自定义异常

²        使用PL/SQL 命令RAISE 检测用户自定义异常

²        PL/SQL 可使用Raise_Application_Error 过程返回一个用户自定义错误数和消息给调用环境。所有的用户自定义错误消息必须在-20000 到-20999 之间

²        PL/SQL 程序可以使用WHEN OTHERS 异常处理来处理没有特定处理的所有异常,WHEN OTHERS 一定放在异常处理的最后

²        PL/SQL 程序可以使用特殊的SQLCODE 和SQLERRM 函数返回oracle 内部错误号码和消息

²        SQLCODE SQLERRM ,SQLCODE 返回一个NUMBER 型的错误类型,而SQLERRM 将返回错误类型相关的错误信息描述。

DECLARE

v_error_code      NUMBER;

v_error_message   VARCHAR2(255);

BEGIN

...

EXCEPTION

...

WHEN OTHERS THEN

ROLLBACK;

v_error_code := SQLCODE ;

v_error_message := SQLERRM ;

INSERT INTO errors VALUES(v_error_code,

v_error_message);

END;

时间: 2024-10-14 06:06:14

plsql 书写命名规范的相关文章

代码书写规范和命名规范

上一篇给大家分享了一下,关于文档编写的几个概念.这篇文章阐述如果编写代码书写规范以及命名规范文档.[以java语言为例] 1.代码书写规范 代码书写规范,能够让不同的人,写出相同风格的代码.很多人都看过java源代码,你会发现java源代码的整体风格几乎是一致的,但是你要知道编写源代码的人是很多的,如何才能让他们写出同一风格的代码呢?这就是代码书写规范的作用. 代码书写规范描述的是如何从头到尾书写代码(自己定义的).通俗点讲就是如何书写java文件.就像你写毕业论文一样,从头到尾每个细节都是有要

css命名规范和书写规范

1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3.文字系列(font, line-height, letter-spacing, color- text-align等)4.背景(background, border等)5.其他(animation, transition等) CSS书写规范 使用CSS缩写属性 CSS有些属性是可以缩写的,比如padding,mar

CSS命名规范参考及书写注意事项

CSS书写顺序 *{ /*显示属性*/ display position float clear cursor - /*盒模型*/ margin padding width height /*排版*/ vertical-align white-space text-decoration text-align - /*文字*/ color font content /*边框背景 为什么要把 boder和background放在最后的原因是修改的频率会较之前的频繁,放在最后查看起来方便,哈哈.*/ 

C#中的代码书写规范以及命名规范

C#代码书写规则: 1. 尽量使用接口,然后使用类实现接口,以提高程序的灵活性. 2.一行不要超过80个字符 3.尽量不要手动更改计算机生成的代码 4.关键的语句写注释 5.建议局部变量在最接近使用它的地方声明 6.不要使用goto系列语句,除非使用在跳出深层循环时 7.避免出现使用超过5个参数的方法. 8.避免书写代码量过大的try....catch模块 9.避免同一个文件中放置多个类 10.生成和构建一个长的字符串时,一定要使用StringBuilder类型,而不用string类型 11.s

PHP中的书写规则与命名规范

一.书写规则 1. 缩进 一个Tab. 2. 大括号{} 两种书写规则都可以,根据个人习惯. 3. 小括号与关键字之间有一个空格,小括号与函数紧贴 4. 运算符与变量(或表达式)两边有一个空格(字符串运算会除外) 二.命名规范 1. 类名 大驼峰 2. 类属性 m后跟大驼峰 3. 方法名 动词,大驼峰 4. 方法中的参数 小驼峰 5. 变量名与函数名 小写单词+下划线 6. 全局变量 g+大驼峰 7. 常量 全部字母都大写 8. 静态变量 s+大驼峰 以上命名规则可以组合使用. PHP中的书写规

常用html、CSS、javascript前端命名规范

常用html.CSS.javascript前端命名规范 无意发现自己文件夹里面有这么一个文件,具体从哪里来的不记得了,仔细看下,发现总结的挺好的,贴出来分享一下. 无论是从技术角度还是开发视角,对于web前端开发规范文档都有一定规范,本文就css3和html5的发展前景总结了一系列的web开发文档,仅供大家参考. 规范目的: 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. 本

数据库表的命名规范

数据库表的命名规范 数据库 命名规范 数据文件 数据库表 只有一个系统 有多个系统 关联表名 数据库字段命名规范 其它 视图名 存储过程名 SQL语句 原文链接 数据文件 数据文件命名采用系统名_文件类型,比如系统名为kupage,则数据库文件命名为kupage_database.mdf,有的数据库文件有多个,比如SQL Server就有2个,一个是数据库文件,另一个是日志文件,那么他们的文件命名分别为kupage_database.mdf,kupage_log.log.文件名全部采用小写. 总

javaSE之java命名规范

java命名规范 1.Java中的名称规范: (1)包名全是小写:xxyyzz: (2)类名接口名:首字母大写:XxxYyy: (3)变量名和函数名:变量名不能是关键字:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写xxxYyyZzz.(驼峰表示法) (4)常量名:所有字母都大写.多单词时每个单词用下划线链接,XXX_YYY_ZZZ. 2.Java中书写程序的规范: (1)类包含方法,方法包含语句: (2)类名通常由英文单词组成(有意义的名称,可增加阅读性),首字母要大写:

项目复习期总结3:CSS引入方式,注释,命名规范,背景,行高,文本属性

目录: 1.CSS注释的书写 怎么写?好处? 2.CSS引入方式  各种的优缺点 3.选择器的写法与选择器的优先级 4.CSS命名规范 5.背景,行高 6.文本(text与font开头)等所有属性 ① CSS注释书写规范: 1.单行注释:    直接写在属性值的后面,如: ① .search{ border:1pxsolid#fff;/*定义搜索输入框边框*/ background:url(../images/icon.gif)no-report#333;/*定义搜索框的背景*/ } ② .wr