PL/SQL编码规范

原创 2015年07月08日 07:50:50

PL/SQL编码规范

TBPL/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;

相关文章推荐

oracle pl/sql编码规范

一、对象编码规范表 table  t_/tbl_  或者不加前缀。视图view  v_/v序列  sequence  seq_蔟  cluster c_触发器 trigger  trg_存储过程 pr...

PL/SQL编码规范: 注释、变量命名、书写格式、逻辑分支、 循环处理

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

PL/SQL标准建表规范

(一) –创建表 workcenter CREATE TABLE workcenter –指定表名称 ( id int, –添加编号字段 name v...

PL/SQL函数的传入参数名称要规范,不能和函数内使用到的表的字段名称一样,否则会出错(带例子)

参数的命名规范是需要注意的,否则PL/SQL体可能会出错。
  • suding3
  • suding3
  • 2016年10月26日 12:16
  • 470

关于oracle中PL/SQL语句,即存储过程的写法和调用。

1.什么是PL/SQL,有什么作用   --Procedure Language/SQL 过程语言+SQL   --PL/SQL是Oracle数据库内部存储和运行     一段程序   --P...

【Oracle】PL/SQL 显式游标、隐式游标、动态游标

在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个...

PL/SQL连接Oracle数据库--没有连接为选项

在Win 7 上装的64位的Oracle数据库,然后装上了32位的Oracle客户端,用PLSQL连接Oracle时出现如图情况,只有用户名,密码,数据库的填写或者选择框,没有“登录为”(角色)的选择...

Oracle PL/SQL开发基础(第二十七弹:事务处理简介)

什么是事务处理 事务(Transaction)是一个由多条SQL语句组成的工作逻辑单元,这些语句要么全部执行成功,要么全部不执行,只要有一条SQL语句执行失败,已执行的SQL语句会全部回滚到执行之前...

PL/SQL报错:无法解析指定的连接标识符

这篇文章写得不错,所以转载保存,保存资料。 在安装oracle的时候PL/SQL报错:“ORA-12154: TNS:无法解析指定的连接标识符”,在网上找了很多资料,然后问题解决。其中下面的文章分析...

PL/SQL Developer_如何快速获得表名或列名的文本形式

实验:使用PL/SQL Developer软件获得表名、列名的文本形式   操作过程: 例1:以“逗号”格式获取“用户表名”的文本 使用scott登陆到PL/SQL Developer,在All ob...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PL/SQL编码规范
举报原因:
原因补充:

(最多只允许输入30个字)