版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文件标识:QD-30-08密级:内部
版本号:Ver1.0
大庆金桥软件开发作业体系
Oracle数据库命名编码规范
oracle编码规范
大庆金桥信息技术工程有限公司 -
PAGE
50
-
变更历史
操作
责任人
日期
版本
变更内容
创建
李富华
2010-04-20
无
创建文档
编辑
周强
2010-04-21
无
修改文档
目录
1. 文档介绍
4
1.1 文档目的
4
1.2 文档范围
4
1.3 定义
4
1.4 参考资料
4
2. 命名规范
4
2.1 一般规则
4
2.2 对象命名汇总表
5
3. 编码规范
6
3.1 一般性规定
6
3.2 CREATE语句
7
3.3 SELECT语句
7
3.4 INSERT语句
8
3.5 UPDATE语句
8
3.6 DELETE语句
9
3.7 游标语句
9
3.8 IF语句
9
3.9 简单循环语句
11
3.10 FOR循环语句
11
3.11 WHILE循环语句
11
3.12 程序块规范
12
3.13 语法规范
12
4. 设计规范
14
4.1 一般表设计
14
4.2 专门表设计原则
15
4.3 索引设计原则
15
4.4 完整性设计原则
15
4.5 触发器
15
4.6 视图设计
15
4.7 性能优化
16
5. 书写规范
20
5.1 缩进风格
20
5.2 空格及换行
20
6. 注释讲明
21
6.1 一般性注释
21
6.2 函数文本注释
21
7. 异常规范
22
7.1 pl/sql异常规范
22
7.2 后台验证异常信息规范
23
8. 附录
23
8.1 附一开发工具
23
8.2 附二预定义异常
24
8.3 附三范式
25
8.3.1 第一范式
25
8.3.2 第二范式
25
8.3.3 第三范式
25
8.3.4 Boyce-Codd范式
26
8.3.5 第四范式
26
8.3.6 第五范式
26
8.3.7 反规范化
26
文档介绍
文档目的
本文档用于指导开发设计人员对Oracle数据库进行设计和编码。使用统一的命名和编码规范,使数据库对象命名及编码风格标准化,可增加程序的可读性,增强系统的可维护性,提高软件的质量。
本文档仅仅针对Oracle数据库做的规范,对其他数据库不具有指导意义。
文档范围
本规范适用于公司范围内所有以Oracle作为后台数据库的应用系统和项目开发工作。对公司2010年往常用Oracle数据库开发的项目不做限制。
定义
无
参考资料
命名规范
一般规则
Oracle中的各种数据对象,包括实例、数据库、表空间、表、视图、存储过程、函数、解发器等的命名都要遵循Oracle的标准命名规则:
以字符打头,30个字符以内,名称超过长度的情况下适当采纳缩写。
只能包含A-Z,a-z,0-9,_。
不能和同一个表空间下的其他对象重名。
不能是Oracle服务器的保留字。
数据对象尽量不要使用缩写;如要缩写最好使用容易看明白的缩写。
对象命名汇总表
对象
对象名
前缀
范例
描述
表(table)
t_<table>
t_user
表名长度原则上不超过25个字符;表、视图、字段名中不出现复数,创建表必须要注释,comments必须要填写。
视图(view)
v_<table>
v_user
假如表名或字段名过长,则用表名或字段名的缩写。
序列(sequence)
s_<table>
s_user
一般索引(normalindex)
i_<table>_<field>
i_user_username
field:字段名,遇上长字段名可采纳缩写
唯一索引(uniqueindex)
i_u_<table>_<field>
i_u_user_birthday
主键(primarykey)
pk_<table>_<field>
pk_user_userid
外键(foreignkey)
fk_<table>_<father_table>_<field>
fk_student_user_userid
簇(cluster)
cl_<table1>_<table2>
cl_user_student
触发器(triger)
tr_i_<功能>
tr_u_<功能>
tr_d_<功能>
tr_iud_<功能>
tr_i_add_user_birthday
i:insert
u:update
d:delete
存储过程(procedure)
p_i_<功能>
p_u_<功能>
p_d_<功能>
p_s_<功能>
p_i_user_birthday
函数(function)
f_<功能>
f_get_username_by_userid
包及包体(package&packagebody)
pkg_<功能>
pkg_user_info
类及类体(type&typebody)
type_<功能>
type_user_class
同义词(synonym)
inv_<table>
inv_user
保存点(savepoint)
save_<table>
save_<transaction>
表的保存点
事务的保存点
事务(transaction)
trans_<transaction>
trans_insert_userinfo
字段(field)
create_date
单词小写,中间用下划线隔开,字段必须要注释,comments必须要填写。
游标(cursor)
cur_<名称>
cur_user_info
数据库链接(databaselink)
link_<服务器名>_<数据库名>
若远程服务器名和数据库名一致,采纳link_<数据库名>
用户及角色
编码规范
一般性规定
sql语句中的所有表名、字段名全部小写,
系统
保留字、内置函数名、sql保留字大写。【推举】
连接符OR、IN、AND、以及=、<=、>=等前后各加上一个空格。当语句中出现括号时,括号的两边不留空格。
“不等于”统一使用"<>"。尽管"!="和"<>"是等价的,为了统一,不等于一律使用"<>"表示。
对较为复杂的sql语句加上注释,讲明算法、功能。
使用空行将逻辑相关的代码段之间分隔开。
程序块采纳缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2个。必须使用空格,不同意使用TAB键,以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。
一行有多列,超过80个字符时,基于列对齐原则,采纳下行缩进。
where子句书写时,每个条件占一行,保留字或者连接符放到行的最后面,含有键的条件放到其他条件的前面。
CREATE语句
CREATETABLEt_dksz(
YHBSVARCHAR2(20)NOTNULL,
ZHGXDATE,
DKKHDVARCHAR2(24),
CONSTRAINTpk_dksz_yhbsPRIMARYKEY(YHBS)
)
SELECT语句
查询语句采纳以下原则编写(可最大化重用共享池中的SQL语句,提高应用程序性能):
由SELECT开头,后跟一个显示查询结果的列表;【推举】
语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行;
由FROM开头,后跟一个或多个猎取数据所涉及的表,假如后面跟多个表,关键字右对齐;【推举】
由WHERE开头,后跟一个或多个确定所需值的条件,假如后面有多个条件,关键字右对齐;【推举】
由GROUPBY开头,后跟一个或多个表列名,通过这些列以对查询结果进行汇总,关键字右对齐;【推举】
由ORDERBY开头,后跟一个或多个表列名,通过这些列以对查询结果进行排序,关键字右对齐;【推举】
当语句中出现括号时,括号的两边不留空格;
在SQL语句使用运算符时,操作两边应各留一个空格;
每个部分分行编写,将每一行的第一个关键字与第一行的SELECT尾部对齐;
例如:
SELECTcol1,col2,col3
FROMtable1
WHEREcol1>col2
GROUPBYcol1,col2
ORDERBYcol1;
SELECTcol1,col2,col3,col4,col5,col6,
col7,col8,col9,col10
FROMsb_sbqkxx,sb_bb011101
WHERE sb_sbqkxx.czwdbh=sb_bb.czwdbh
AND sb_sbqkxx.swdjbh=avc_swdjbh
AND sb_sbqkxx.sbsssq=avc_sbsssq;
INSERT语句
关键字用大写,列名和表名采纳小写;【推举】
语句中嵌入逗号时,在逗号后面加一空格,当逗号是最后一个字符时,把它放在本行;
当语句的同一部分要连续到下一行时,按下列格式排列:
当语句中出现括号时,括号的两边不留空格。
格式如下:【推举】
INSERTINTO<要插入的表名>
(<列1>,<列2>,..,<列n-1>,<列n>)
VALUES
(<列1值>,<列2值>,..,<列n-1值>,<列n值>)
例如:
insertintosm_user
(user_id,user_name,login_name)
values
(p_user_id,p_user_name,p_login_name)
insertintosm_duty_bak
(duty_id,duty_name,created_by,creation_date,last_updated_by,
last_update_date,disable_date)
select
duty_id,duty_name,created_by,creation_date,last_updated_by,
last_update_date,disable_date
fromsm_duty
whereduty_id=:duty_id
UPDATE语句
关键字右对齐;
格式如下:【推举】
UPDATE<要更新的表名>
SET<要更新的列>=<列值>,
<要更新的列>=<列值>,
<要更新的列>=<列值>
DELETE语句
格式如下:【推举】
DELETEFROMtable1
WHEREcol1='???'
游标语句
格式如下:【推举】
程序中使用显示游标。格式如下
OPENcur_name;
LOOP
FETCHcur_into…;
EXITWHENcur_name%notfound;
<处理语句>…
ENDLOOP;
CLOSEcur_name;
IF语句
条件执行语句IF…ELSE按以下格式编写:【推举】
IF<条件表达式>THEN
<一条或多条语句>
[ELSE(或ELSIF<条件表达式>)THEN
<一条或多条语句>
ENDIF;
在IF…THEN和ELSE(或ELSIF)及ELSE…THEN和ENDIF间可包含一条或多条PL/SQL语句,而不需要加BEGIN和END
IF…ELSE…ENDIF语句能够嵌套;
注意ELSIF的写法;
if后的条件要用括号括起来,括号内每行最多两个条件。
例如:
if(v_count=1orv_count=2or
v_count=5orv_count=6)then
selectsysdate
intov_date
fromdual;
endif;
减少操纵语句的检查次数,如在else(if..else)操纵语句中,对最常用符合条件,尽量往前被检查到。
例如:以下例如不符合规范(假设v_count=1条件大数情况会被满足)
if(v_count=0)then
null;
elsif(v_count=1)then
null;
endif;
应如下书写:
if(v_count=1)then
null;
elsif(v_count=0)then
null;
endif;
尽量幸免使用嵌套的if语句,在这种情况应使用多个if语句来推断其可能。
例如:以下例如不符合规范
ifv_count=0then
ifv_flag=0then
null;
else
null;
endif;
elsev_count=1then
ifv_flag=0then
null;
else
null;
endif;
endif;
应如下书写:
if(v_count=0)and(v_flag=0)then
null;
elsif(v_count=0)and(v_flag=1)then
null;
elsif(v_count=1)and(v_flag=0)then
null;
elsif(v_count=1)and(v_flag=1)then
null;
endif;
简单循环语句
LOOP
<零条或多条语句>
EXITWHEN<条件表达式>
<零条或多条语句>
ENDLOOP;
FOR循环语句
FOR变量IN[变量取值范围]
LOOP
<一条或多条语句>
ENDLOOP;
WHILE循环语句
WHILE<条件表达式>
LOOP
<一条或多条语句>
ENDLOOP;
程序块规范
在sql代码块中尽量使用begin...end语句块,提高代码可读性。
关于触发器、存储过程、函数等带名的程序块,要使用块结束标识。
如
CREATEORREPLACEPROCEDUREp_get_userinfo
…
BEGIN
…
ENDp_get_userinfo;/*此处的过程名p_get_userinfo是可选的,规范要求写上,与块开始的CREATE相对应*/
语法规范
幸免隐式的数据类型转换。
讲明:在书写代码时,必须确定表的结构和表中各个字段的数据类型,特不是书写查询条件时的字段就更要注意了。
例如:以下代码不符合规范,status_type是number型数据.
select
wdj.wip_entity_id
from
wip.wip_discrete_jobswdj
where
wdj.status=‘3’;
应如下书写:
select
wdj.wip_entity_id
from
wip.wip_discrete_jobswdj
where
wdj.status=3;
不要将空的变量值直接与比较运算符(符号)比较。假如变量可能为空,应使用isnull或isnotnull或nvl函数进行比较。
例如:以下代码不符合规范
ifv_user_name=nullthen
dbms_output.put_line(‘usernameisnull’);
endif;
应该如下书写:
ifv_user_nameisnullthen
dbms_output.put_line(‘usernameisnull’);
endif;
关于特不复杂的sql(特不是多层嵌套,带子句或相关的查询),应该先考虑是否设计不当引起的,关于复杂的一些sql能够考虑使用程序实现,原则上遵循一句话只做一件情况。
尽可能地使用相关表字段的类型定义,形如%type、%rowtype。
存储过程中变量的声明应集中在as和begin关键字之间,不同意在代码中随意定义变量,定义变量时,完成相同功能模块的变量应放在一起,与不同模块的变形量应空行隔开,增加代码的可读性。
orderby后面字段不唯一时分页会出现问题,分页时假如orderby后面的字段不唯一,一定要让orderby唯一,最佳方案是增加一pk,如实在没方法则能够追加rowid,orderby后尽量幸免使用rowid。
使用varchar2代替varchar类型。
当存储过程有多个分支返回时,若有事务,需确保各个分支都结束了事务。
in、out参数应按类不分开书写,不要交叉,关于out参数,特不是nesttable、record,尽量都带上nocopy,提高程序的运行效率。
聚拢函数max、min、sum在没有记录得符合查询条件的情况下返回null,可不能产生no_data_found异常。
原则上不要使用动态sql,假如非得使用运态sql,须绑定变量。【推举】
尽量不要使用子函数方式实现存储过程,应分不定义。【推举】
代码中不建议使用goto语句。【推举】
确保所的变量和参数都使用到。【推举】
确保变量和参数在类型和长度与表数据列类型和长度相匹配。假如与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。
例如:如fnd_users表user_name字符宽为50,当用户名大于10时会报错。
declare
v_user_namevarchar2(10);
begin
selectfu.user_name
intov_user_name
fromfnd_userfu
wherefu.user_id=p_user_id;
end;
当一个PL/SQL或SQL语句中涉及到多个表时,始终使用不名来限定字段名,这使其它人阅读起来更方便,幸免了含议模糊的引用,其中能够不名中清晰地推断出表名。不名命名时,尽量避逸使用无意义的代号a、b、c…,而应该有意义(如表system_items_b对应不名为msi,po_headers_all不名对应为pha)。
例如:以下编码不符合规范:
select
wip_entity_name,a.wip_entity_id,a.date_released
from
wip.wip_entitiesb,
wip.wip_discrete_jobsa
where
b.wip_entity_id=a.wip_entity_idand
a.status_type=3and
a.date_released>trunc(sysdate)
应如下书写:
selectwe.wip_entity_name,wdj.wip_entity_id,wdj.date_released
fromwip.wip_entitieswe,
wip.wip_discrete_jobswdj
wherewe.wip_entity_id=wdj.wip_entity_id
andwdj.status_type=3
andwdj.date_released>trunc(sysdate)
设计规范
一般表设计
表空间设计,原则上表空间名与schema名一致,其索引所在空间为schemaname+index。
如:schema为INV,则默认的表空间应该为INV,所对应的索引空间为INVINDEX
tablespace——每个表在创建时候,必须指定所在的表空间,不要采纳默认表空间,以防止表建立在system空间上,导致性能问题。关于事务比较繁忙的数据表,必须存放在在该表专用空间中。
依照性能需要,能够适当可曾加冗余;
专门表设计原则
分区表——关于数据量比较大的表,依照表数据的属性进行分区,以得到较好的性能。假如表按某些字段进行增长,则采纳按字段值范围攻进行分区;假如表按某个字段的几个关键值进行分布,则采纳列表分区;关于静态表,则采纳hash分区或列表分区;在范围分区中,假如数据按某关键字段均衡分由,则采纳子分区的复合分区法。
在分区表中不建议使用全局索引,因为trunc分区时会导致全局索引失效,造成难以维护。
索引设计原则
每个索引在创建时,必须指定表空间,不要采纳默认表空间,以防止索引建立在system空间和非索引专用空间,以减少IO冲突,提高性能。
完整性设计原则
主键约束——原则上所有的数据表都要有主键。关于数据量比较大的表,要求指定索引字段。
外键关联——关于关联两个表字段,一般应该分不建立主键、外键。实际是否建立外键,依照对数据完整性的要求决定。为了提高性能,关于数据量较大的表要求对外键建立索引。关于有要求级联删除属性的外键,必须指定ondeletecascade.
Null值——关于字段能否为null,应该在sql建表脚本中明确指定,不应该使用缺省。由于null值在参加任何计算时,结果均为null,因此在程序中必须用nvl()函数把可能为null值的字段或变量转换非null的默认值。
Check条件——关于字段有检查性约束,需指定check原则。
触发器
触发器是一种专门的存储过程,通过数据表的DML操作而触发执行,其作用为确保数据的完整性和一致性不被破坏而创建,实现数据的完整性约束。
讲明:触发器的before或after事务属性的选择时候,对表操作的事务属性必须与应用程序保持一致,以幸免死锁发生,在大型导入表中,尽量幸免使用触发器。
在系统中不要使用过多的触发器。
视图设计
尽量使用简单的视图,幸免使用复杂的视图。
简单视图:数据来自单个表,且无分组(distinct/groupby)、无函数。
复杂视图:数据来自多个表,或有分组、有函数。
性能优化
避名频繁commit,尤其是把commit写在循环体中每次循环都进行commit。
使用绑定变量,幸免常量的直接引用。
例如:以下书写不符合本规范.
insertintosm_users(user_id,user_name,created_by,creation_date)values
(1,’Tang’,-1,sysdate);
建议用如下方式操作:
declare
v_user_idsm_users.user_id%type;
v_user_namesm_users_user_name%type;
v_created_bysm_users.created_by%type;
v_creation_datesm_users.creation_date%type;
begin
…
insertintosm_users(
user_id,
user_name,
created_by,
creation_date)
values(
v_user_id,
v_user_name,
v_created_by,
v_creation_date);
in、exists的使用规范
例如:当有A、B两个结果集,当结果集B专门大时,A较小时,适用exists,如:
select*
froma
whereexists(select1frombwherea.column=b.column);
当结果集A专门大时,B专门小时,适用in,如:
select*
froma
wherea.columnin(
selectb.column
fromb)
幸免不必要的排序
讲明:对查询结果进行排序会大大的降低系统的性能。
关于数字型的唯一键值,用序列sequence产生。
索引的规则:
建立索引常用的原则如下:
1).表的主键、外键必须有索引
2).1000行的表应该有索引
3).经常与其它表进行连接的表,在边接字段上应建立索引
4).经常出现在where子句中的字段且过滤性极强的,特不是大表的字段,应该建立索引
5).索引字段,尽量幸免值为null
6).复合索引的建立需要认真分析;尽量考虑用单字段索引代替;
A. 正确选择复合索引中的第一个字段,一般是选择性较好的且在where子句中常的字段上;
B. 复合索引的几个字段是否经常同时以and方式出现在where子句中?单字段查询是否极少其至没有?假如是,则能够建立复合索引;否则考虑单字段索引;
C. 假如复合索引中包含的字段经常单独出现在where子句中,则分解为多个单字段索引;
D. 假如复合索引所包含的字段超过3个,那么认真考虑其必要性,考虑减少复合的字段;
E. 假如既有单字段索引,又有这几个字段上的复合索引,一般能够删除复合索引;
7).频繁DDL的表,不要建立太多的索引;
8).删除无用的索引,幸免对执行打算造成负面阻碍;
让SQL语句用上合理的索引。
原则如下:
首先,看是否用上了索引,关于该使用索引而没有用上索引的SQL语句,应该想方法用上索引。
其次,看是否用上了索引,特不复杂的SQL语句,当其中where子句包含多个带有索引的字段时,更应该注意索引的选择是否合理。错误的索引不仅可不能带来性能的提高,相反往往导致性能的降低。
针对如何用上合理的索引,以Oracle数据中的例子进行讲明:
任何对列的操作都可能导致全表扫描,那个地点所谓的操作包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数。
幸免不必要的类型转换,要了解“隐藏”的类型转换。
增加查询的范围,限制全范围的搜索。
索引选择性低,但数据分布差异专门大时,仍然能够利用索引提高效率。
Oracle优化器无法用上合理索引的情况下,利用hint强制指定索引。
使用复合索引且第一个索引字段没有出现在where中时,建议使用hint强制。
pl/sql使用短路径法,当计算逻辑表达式,即:一旦确定后,pl/sql停止计算表达式。【推举】
notin的替换写法【推举】
例如:
selectdeptno
fromdept
wheredeptnonotin
(selectdeptnofromemp)
建议写成:
selectdeptno
fromdept,emp
wheredept.deptno=emp.deptno(+)and
emp.deptnoisnull
like子句尽量前端匹配【推举】
like参数使用得特不频繁,因此假如能够关于like子句使用索引,将专门好地提高查询的效率。
例如:查询都市代码
select*
fromcity
wherecity_namelike‘%ZHEN%’
修改为
select*
fromcity
wherecity_namelike‘SHNEZHEN%’
幸免使用select*语句。
讲明:不要用*来代替所有字段,应给出字段列表,注:不包含selectcoun(*).例如:以下不符合规范:
insert语句必须给出字段列表,使用insert语句一定要给出要插入的字段列表,如此即使更改了表结构加了字段也可不能使用引用了本表的存储过程失效。
从表中同一笔记录中猎取记录的字段值,须使用同一SQL语句得到,不同意分多条SQL语句。
例如:以下不符合此规范
selectduty_id
intov_duty_id
fromsm_duty
whererownum=1;
selectduty_name
intov_duty_name
fromsm_duty
whererownum=2;
应如下书写:
selectduty_id,duty_name
intov_duty_id,v_duty_name
fromsm_duty
whererownum=1
书写规范
缩进风格
程序块采纳缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2个。
必须使用空格,不同意使用TAB键。
具体语句参考“编码规范”小节
空格及换行
不同意把多个语句写在一行中,即一行只写一条语句。
例如:以下书写不符合规范:
v_count:=1;v_creation_date:=sysdate;
应写成:
v_count:=1;
v_creation_date:=sysdate;
相对独立的程序块之间必须加空行。两个程序块在逻辑上相对独立,应用空行加以分隔,同时增加注释。
超过80列的语句要分行书写,长表达式应在低先级操作符处换行,操任符或关键字放在新行之首。划分出新行应当适当地缩进,使排版整齐,语句可读。
begin、end独立成行
例如:以下不符合规范
beginnull;exceptionwhenothersthennull;end;
应写成:
begin
null;
exception
whenothersthen
null;
end;
注释讲明
一般性注释
注释尽可能简洁、详细而全面。
创建每一数据库对象时都要加上COMMENTON注释,以讲明该对象的功能和用途;建表时,对某些数据列也要加上COMMENTON注释,以讲明该列和/或列取值的含义。如:XX表中有CZZT列属性为NUMBER(10,0)可加COMMENTON注释如下COMMENTONCOLUMNXX.CZZTIS'0=正常,1=等待,2=超时,3=登出'
在pl/sql中,为每个变量声明添加注释,讲明该变量用途。
在块的每个要紧部分之前增加注释,讲明该段语句及算法的目的以及要得到的结果。
注释语法包含两种情况:单行注释、多行注释
单行注释:注释前有两个连字符(--),一般对变量、条件子句能够采纳该类注释。
多行注释:符号/*和*/之间的内容为注释内容。对某项完整的操作建议使用该类注释。
函数文本注释
在每一个块和过程(存储过程、函数、包、触发器、视图等)的开头放置注释。
/************************************************************************
函数名称:
功能描述:
输入参数:
输出参数:无
返回值:无
创建者:<中文姓名>
创建时刻:2010-04-10
修改记录
修改人员:
修改时刻:
修改内容:
*************************************************************************/
CREATE[ORREPLACE]PROCEDUREdfsp_xxx
…
传入参数的含义应该有所讲明。假如取值范围确定,也应该一并讲明。取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。
在每一个变量声明的旁边添加注释。讲明该变量要用作什么,通常,简单使用单行注释就行了,例如l_sfhCHAR(11)--身份证号码。
在块的每个要紧部分之前添加注释
在块的每个要紧部分之前增加注释,解释下—组语句目的,最好是讲明该段语句及算法的目的以及要得到的结果,但不要对其细节进行过多的描述
在块和过程的开头注释中还能够增加要访问的数据库等信息
异常规范
pl/sql异常规范
关于存储过程、函数等程序块都要有异常处理部分,以提高程序的自检能力。
异常节格式如下:
--自定义异常
my_errEXCEPTION;
…
--抛出自定义异常
RAISEmy_err;
…
--异常节
EXCEPTION
WHENmy_errTHEN
<statements>
WHENno_data_foundTHEN--系统预定义异常
<statements>
…
WHENothersTHEN
<statements>
END;
在异常节的最后都要设置others异常处理,它处理所有没有明确列出的异常。
项目开发时期,为了调试方便、快速定位错误,能够创建xtycxx(系统异常信息)表,记录产生系统异常的存储过程或函数名、异常名,假如过程或函数中有多个程序块,记录块的描述信息。
例如
EXCEPTION
WHENno_data_foundTHEN
INSERTINTOxtycxx
(ccmc,ycmc,ms)
VALUES(‘ap_name’,’no_data_found’,’猎取操作文档编号’);
…
WHENothersTHEN
INSERTINTOxtycxx
(ccmc,ycmc,ms)
VALUES(‘ap_name’,’others’,’猎取操作文档编号’);
RETURN;
END;
后台验证异常信息规范
使用数据库过程、函数进行后台数据验证时,发觉异常情况,需要记录异常,并返回到用户界面。
异常信息描述要求简洁、准确、完整,揭示异常实质,准确定位异常出现的位置。
异常分为警告和错误两类。
由于每个实际项目,业务不同,异常信息也变化专门大。每个项目开始时依照需求,统一进行定义。
附录
附一开发工具
Oracle开发工具使用。【推举】
项目开发统一使用集成的开发环境pl/sqldeveloper作为开发工具,用于开发、测试、调试和优化pl/sql存储程序单元。
项目组成员使用pl/sqldeveloper的美化器功能,选取统一的规则文件,自动美化。多人编写的代码具有相同的书写格式,风格统一。查询语句还可最大化重用共享池中的sql语句,提高应用程序性能。
以下工具能够做为参考工具:
1、编码工具:ultraedit-32全称:UltraEdit–32ProfessionalText/HextEditor公司:IDMComputerSolutions,Inc.网址:/
2、测试工具:pl/sqldeveloper
全称:pl/sqldeveloper
公司:AllroundAutomations
网址:/plsqldev.html
3、调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙教版2021-2022学年度七年级数学上册模拟测试卷 (839)【含简略答案】
- Methoprene-Standard-生命科学试剂-MCE
- MAIPGG-生命科学试剂-MCE
- 锅炉课程设计辅助工具
- 顶级奢侈品鉴定课程设计
- 搬运升降机课程设计
- 钢结构21米跨课程设计
- 防疫宣传手册课程设计
- 搅拌型酸奶课程设计
- 插画动画课程设计
- 第五章 材料的热性能
- 民航英语1(山东联盟)智慧树知到课后章节答案2023年下青岛恒星科技学院
- 石材幕墙板缝打胶施工方案
- 跨部门工作联络单
- 跌倒坠床流程图
- 大陆居民往来台湾地区申请审批表
- “四新”背景下的2023年高考教学与备考指导
- 农业示范基地培训观摩方案
- 消防安全重点单位标准化管理操作手册
- 军事理论期末试题含答案
- 2023公路桥梁钢结构防腐涂装技术条件
评论
0/150
提交评论