DP-数据库编码规范-V1.00(7)

2018-11-17 19:46

东浦数据库开发标准

4.其它规范

此文档的所有部分都为公司的机密文档,其版权为公司所有,未经允许不得非法复制和外流

东浦数据库开发标准

4.1 异常处理

4.1.1 异常类型

异常分为内部定义和用户自定义,内部定义异常有预定义的名称,明细描述见下表:

异常名称(exception) 异常代码(Sqlcode) ACCESS_INTO_NULL ORA-06530 CASE_NOT_FOUND ORA-06592 COLLECTION_IS_NULL ORA-06531 异常描述(Sqlerrm) 程序尝试为一个未初始化对象的属性赋值 CASE语句中没有任何WHEN子句满足条件,并且没有编写ELSE子句 程序尝试调用一个未初始化(自动赋为null)嵌套表或变长数组的集合方法(不包括EXISTS),或者是程序尝试为一个未初始化嵌套表或变长数组的元素赋值 程序尝试打开一个已经打开的游标。一个游标在重新打开之前必须关闭。 程序尝试向一个有着唯一约束条件的数据库字段中保存重复值 程序尝试操作一个不合法的游标 字符串向数字转换时会发生错误。 SELECT INTO语句没有返回数据 赋值语句中使用的主游标变量和PL/SQL游标变量的类型不兼容。 运行时内存溢出或内存不足 程序引用一个嵌套表或变长数组元素,但使用的下标索引超过嵌套表或变长数组元素总个数 SELECT INTO语句返回多行数据 发生算术、转换、截位或长度约束错误 除数为0 CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR INVALID_NUMBER NO_DATA_FOUND ROWTYPE_MISMATCH STORAGE_ERROR SUBSCRIPT_BEYOND_COUNT TOO_MANY_ROWS VALUE_ERROR ZERO_DIVIDE ORA-06511 ORA-00001 ORA-01001 ORA-01722 ORA-01403 ORA-06504 ORA-06500 ORA-06533 ORA-01422 ORA-06502 ORA-01476 自定义异常:对于其他的内部异常,可以在存储过程、子程序或包的声明部分自定义异常,用户自定义异常必须有一个名字。

4.1.2 异常声明

异常只能在PL/SQL块、子程序或包的声明部分声明,异常不能出现在赋值语句或SQL语句中

例子:DECLARE exp_noorder EXCEPTION;

4.1.3 异常抛出

错误发生时,异常就会被抛出,正常的执行语句会被终止,控制权被转到PL/SQL块的异常控制部分或子程序的异常控制部分。内部异常会由系统隐式地抛出,而用户定义异常用RAISE语句抛出。RAISE语句也可以抛出预定义异常,异常被抛出时,如果在当前块或子程序中没有找到对应的异常控制程序,异常就会被继续向上一级传递。否则异常直接在子程序中被捕获无法传递到上一级程序。

此文档的所有部分都为公司的机密文档,其版权为公司所有,未经允许不得非法复制和外流

东浦数据库开发标准

例子: BEGIN

IF …THEN

RAISE exp_noorder; 抛出自定义异常 end if;

EXCEPTION

WHEN exp_noorder THEN 捕获异常

… END;

4.1.4 异常捕获

异常处理程序用于捕获抛出的异常。异常控制程序运行后,当前块就会停止执行,直接运行异常处理程序。异常处理程序执行完毕后,子程序将结束运行。 异常处理程序由WHEN子句和语句序列组成。WHEN子句与抛出异常相匹配时,相关语句序列会被执行。OTHERS处理器可以捕获所有未命名的异常块或子程序,在一场处理程序里只能有一个OTHERS处理器,因为OTHERS处理器能够保证所有的异常都会被控制。

在异常处理程序中,通常使用内置函数 SQLCODE和SQLERRM获取异常信息。对于内部异常,SQLCODE返回异常编号(负数),SQLERRM返回对应的异常信息,异常信息以异常编号开头,最大长度512个字符。不能直接在SQL语句中使用SQLCODE或SQLERRM。必须先赋值给本地变量,然后再使用变量。

此文档的所有部分都为公司的机密文档,其版权为公司所有,未经允许不得非法复制和外流

东浦数据库开发标准

4.2 脚本规范

脚本规范有助于进行版本基线管理、版本控制,有助于系统的自动部署、定位和解决部署过程中出现的问题。

4.2.1 所有脚本按内容分开存放,并按以下顺序使用

1)、创建数据类型脚本 2)、创建业务表脚本 3)、创建临时表脚本 4)、创建视图脚本 5)、创建主外键脚本 6)、创建索引脚本 7)、创建触发器脚本 8)、创建存储过程脚本 9)、初始化数据脚本 10)、创建作业脚本

4.2.2 创建每类对象脚本的首部应该有注释

4.2.3 每个存储过程(函数)单独创建脚本,方便在项目配置库中的管理

此文档的所有部分都为公司的机密文档,其版权为公司所有,未经允许不得非法复制和外流

东浦数据库开发标准

4.3 数据库设计

4.3.1一般表设计

表空间设计,原则上表空间名与schema 名一致,其索引所在空间为schema name + index。

如:schema 为INV,则默认的表空间应该为INV,所对应的索引空间为INVINDEX。

tablespace——每个表在创建时候,必须指定所在的表空间,不要采用默认表空间,以防止表建立在system 空间上,导致性能问题。对于事务比较繁忙的数据表,必须存放在在该表专用空间中。

表中字段的命名长度不应该超过20个字节。

4.3.2 特殊表设计原则

分区表——对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表按某些字段进行增长,则采用按字段值范围进行分区;

如果表按某个字段的几个关键值进行分布,则采用列表分区;对于静态表,则采用hash 分区或列表分区;在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的复合分区法。

在分区表中不建议使用全局索引,因为trunc 分区时会导致全局索引失效,造成难以维护。

4.3.3索引设计原则

每个索引在创建时,必须指定表空间,不要采用默认表空间,以防止索引建立在system 空间和非索引专用空间,以减少IO 冲突,提高性能。

4.3.4完整性设计原则

主键约束——原则上所有的数据表都要有主键。

外键关联——对于关联两个表字段,一般应该分别建立主键、外键。 实际是否建立外键,根据对数据完整性的要求决定;为了提高性能,对于数据量较大的表要求对外键建立索引;对于有要求级联删除属性的外键,必须指定on delete cascade。

Null 值——对于字段能否为null,应该在sql 建表脚本中明确指定,不应该使用缺省;由于null 值在参加任何计算时,结果均为null,所以在程序中必须用nvl()函数把可能为null 值的字段或变量转换非null 的默认值。

Check 条件——对于字段有检查性约束,需指定check 原则。

4.3.5触发器

触发器是一种特殊的存储过程,通过数据表的DML 操作而触发执行,其作用为确保数据的完整性和一致性不被破坏而创建,实现数据的完整性约束。

此文档的所有部分都为公司的机密文档,其版权为公司所有,未经允许不得非法复制和外流

东浦数据库开发标准

说明:触发器的before 或after 事务属性的选择时候,对表操作的事务属性必须与应用程序保持一致,以避免死锁发生,在大型导入表中,尽量避免使用触发器。

在系统中不要使用过多的触发器。

4.3.6视图设计

尽量使用简单的视图,避免使用复杂的视图。

简单视图:数据来自单个表,且无分组(distinct/group by)、无函数。 复杂视图:数据来自多个表,或有分组、有函数。

此文档的所有部分都为公司的机密文档,其版权为公司所有,未经允许不得非法复制和外流


DP-数据库编码规范-V1.00(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:减少凝析油的损失

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: