文档库 最新最全的文档下载
当前位置:文档库 › Oracle数据库开发规范

Oracle数据库开发规范

Oracle数据库开发规范
Oracle数据库开发规范

项目编号:×××

xxx

Oracle数据库开发规范

Oracle DB Development Standardization

<部门名称>

**年**月**日

文档信息:

文档名称:

文档编号:

文档版本日期:

起草人:

起草日期:

复审人:

复审日期:

版本历史:

版本

日期

作者

更改参考

说明

审批信息:

签字/日期

审核

审批

目录

1 概述 4

1.1 编写目的 4

1.2 文档约定 4

1.3 预期的读者和阅读建议 4

1.4 参考文献 5

2 数据库对象命名 6

2.1 命名总体原则 6

2.2 表名 6

2.3 视图 6

2.4 同义词 6

2.5 序列7

2.6 索引7

2.7 存储过程7

2.8 存储函数8

2.9 存储程序包8

2.10 触发器8

2.11 字段8

2.12 其他9

3 设计规范9

3.1 范围9

3.2 表空间9

3.3 字符集10

3.4 主外键约束10

3.5 分区表10

3.6 RAC下的序列设计10

3.7 字段10

3.8 表结构设计11

3.9 索引设计11

3.10 临时表11

4 SQL编写规范 12

4.1 书写规范12

4.2 SQL语句的索引使用13

4.3 SQL语句降低系统负荷 15

5 PL/SQL编程规范18

5.1 书写规范18

5.2 常用数据库操作语句编码规范19

5.3 常用过程控制结构20

5.4 Condition 21

5.5 Cursor 22

5.6 变量定义与赋值22

5.7 过程与函数调用23

5.8 例外处理(Exception) 23

5.9 例外处理的错误消息24

5.10 注释(Comment) 25

5.11 应用调试控制27

5.12 并发控制27

5.13 代码测试、维护29

1 概述

1.1 编写目的

为规范软件开发人员的Oracle数据库开发提供参考依据和统一标准。

1.2 文档约定

说明本文档中所用到的专用术语定义或解释,缩略词定义。

1.3 预期的读者和阅读建议

本文档适用于所有开发员。

1.4 参考文献

列出有关的参考文件,如:

a.属于本项目的其他已发表文件;

b.本文件中各处引用的文档资料。

列出这些文件的标题、作者,说明能够得到这些文件资料的来源。

2 数据库对象命名

2.1 命名总体原则

本规范所涉及数据库对象主要是指表、视图、同义词、索引、序列、存储过程、函数、触发器等;

命名应使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割;避免使用Oracle的保留字或关键字,如LEVEL和TYPE;

各表之间相关列名尽量同名;

除数据库模式对象名称长度为1-8个字符,其余对象名称均要求不超过30个字符;

命名只能使用大写英文字母,数字和下划线,且以英文字母开头。

2.2 表名

规则:XXX_MMM_DDDD

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为表的简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音。

示例:PO_HEADERS_ALL

2.3 视图

规则:XXX_MMM_DDDD_V

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为视图简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音;

V表示视图,如有多个功能类似的视图,名称以V,V1,V2...Vn区分。

示例:PO_HEADER_RELEASE_V

2.4 同义词

规则:与引用的原对象同名

示例:PO_HEADERS_ALL

2.5 序列

规则:XXX_MMM_DDDD_S

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为序列简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音;

S表示序列。

示例:PO_HEADERS_S

2.6 索引

规则:XXX_MMM_DDDD_Tn

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为索引简称含义,要求同表名,如总长度超过限制,可适当缩写;

T有三种值:U表示唯一性索引,N表示非唯一性索引,B表示位图索引;

n表示序号,用数字构成。

示例:PO_HEADERS_ALL_U1

2.7 存储过程

规则:XXX_MMM_DDDD_P

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为存储过程简称含义,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;

P表示存储过程。

示例:PO_HEADERS_P

2.8 存储函数

规则:XXX_MMM_DDDD_F

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为存储函数简称含义,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;

F表示存储函数。

示例:PO_HEADERS_F

2.9 存储程序包

规则:XXX_MMM_DDDD_PKG

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为存储程序包简称,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;

PKG表示存储程序包。

示例:PO_HEADERS_PKG

2.10 触发器

规则:XXX_MMM_DDDD_Tn

说明:XXX代表子系统或模块名称(2-3个字母构成);

MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);

DDDD为触发器简称含义,要求同表名,如总长度超过限制,可适当缩写;

T表示触发器;

n表示序号,用数字构成。

示例:PO_HEADERS_T1

2.11 字段

一般性字段:使用英文单词、词组或其有意义的缩写表示,可包括下划线,不得使用汉语拼音,多个类似含义的字段,可在最后加数字序号;

特殊字段:

(1)代表主键的字段:表名或缩写+"_ID",如PO_HEADER_ID

(2)代表外键的字段:要求与相关表对应字段相同

(3)记录跟踪字段(代表记录创建人、创建时间、最后修改人、最后修改时间):

字段名

类型

NULL?

说明

CREATED_BY

NUMBER

NOT NULL

这些字段仅用于跟踪数据的变化,而不能用于其他用途。

CREATION_DATE

DATE

NOT NULL

LAST_UPDATED_BY

NUMBER

NOT NULL

LAST_UPDATE_DATE

DATE

NOT NULL

(4)扩展字段(预留未来使用):ATTRIBUTE+n,n代表序号,如ATTRIBUTE1,

类型统一为VARCHAR2(150);

对应扩展属性分类字段,命名为ATTRIBUTE_CATEGORY,类型为VARCHAR2(30)。

2.12 其他

其他对象参照上述原则和对象命名。

3 设计规范

3.1 范围

设计规范主要是对与开发关系密切的数据库整体设计部分进行说明,以便于DBA更有效的

管理和维护数据库。主要包括表空间、字符集、主外键约束、分区表、字段类型等内容。3.2 表空间

一致性:无论是基于商品化软件的开发,还是独立的客制化开发系统,对于客制化对象,每个子系统或模块都使用统一的一组表空间(数据表空间和索引表空间各一个,且数据表空间为默认表空间);

独立性:数据和索引独立存储,表空间由DBA统一管理和维护,任何新建表均应使用默认的数据表空间,新建索引均需使用指定的索引表空间;新建表和索引时,原则上不允许指定除表空间以外的任何参数,特殊情况必须指定有别于表空间的默认参数时,需经过单独评审。

示例:CREATE TABLE TABLE_NAME (FIELD1...) TABLESPACE XXX;

例外情况:当使用分区表时,可根据情况建立独立的表空间。

3.3 字符集

应用系统数据库应使用UTF8字符集,应用程序开发本身也需要支持UTF8字符集录入和查询。

注意事项:UTF8字符集默认排序规则非中文拼音,如有需要应在代码级或数据库会话级做特殊处理。

3.4 主外键约束

数据库表对象原则上禁止使用主外键约束,主外键所承担的主要作用应通过其他方式实现,如主子表数据完整性由应用层实现,索引功能通过建立单独索引实现。

3.5 分区表

为了降低数据库的维护复杂度,非必要情况下,不使用分区表;或经常需要跨分区查询数据,此时也不应使用分区表;特殊应用场景确有必要时,可选择范围分区表、列表分区表、哈希分区表、组合分区表几种方式,并根据分区类型和分区依据,调整索引,使相关数据查询尽量在一个分区中完成。

3.6 RAC下的序列设计

当数据库部署架构为RAC时,原则上禁止使用序列生成依赖其大小排序的单据号码,如确有必要,则序列必须设计为禁用缓存模式。

3.7 字段

数值类型使用NUMBER,需要存储整型数值时,可指定小数位精度为0;

枚举类型优先使用数值型替代字符型,且需要备注说明枚举类型的各个不同取值的含义;ID结尾的字段为应为数值型,CODE结尾的字段可为字符型或数值型;

用CHAR(1)表示布尔值的取大写:"Y","N",或改为数值型,用0和1表示;

原则上使用VARCHAR2代替CHAR类型,以节省存储空间,但对性能要求太别高的应用场景例外;

日期时间型应使用DATE,禁止使用字符型;

使用CLOB代替LONG,BLOB代替LONG RAW;

一般性字段应有含义注释,对于可以有缺省值的字段,应设为非空类型,并给出缺省值。3.8 表结构设计

原则上表结构设计应符合第三范式,减少冗余字段,但在不影响数据一致性的情况下,为了提高性能或开发实现的方便性,可以适当增加冗余字段。

创建表时,应添加相关注释,简要说明主要用途。

表与表之间的关系应提供E-R图。

3.9 索引设计

对代表唯一记录的字段或字段组合应建立唯一索引,对于查询中需要作为查询条件的字段,可以考虑建立非唯一索引,对于作为查询条件的枚举型字段,可考虑建立位图索引。

建立复合索引时,应根据条件字段的查询频率决定索引字段顺序。开发过程中新编写的SQL,应对照查询条件检查有无相关索引,除需要特别指定全表扫描的情况外,原则上应建立相关索引。

3.10 临时表

临时表指创建表时指定临时表参数的数据表,并非指表名中含有TEMP字符的表。

尽量避免在临时表上使用DISTINCT、ORDER BY、GROUP BY、HAVING、JOIN,以减轻临时表负担,同时应避免频繁创建和删除临时表,减少系统表资源的消耗。

在新建临时表时,如果一次性插入数据量很大,应使用SELECT INTO代替CREATE TABLE,避免数据库LOG,提高速度;如果数据量不大,为了缓和系统表的资源,可先CREATE TABLE,然后INSERT。

如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,以保证系统能够很好的使用到该临时表的索引。

如果在程序中动态创建了临时表,最后务必将其显式删除,并优先TRUNCATE TABLE,然后DROP TABLE,以避免系统表的较长时间锁定。

4 SQL编写规范

为了提高系统性能,避免未优化的SQL语句降低系统性能,要求SQL语句写法必须考虑以下两个方面:a、使用恰当的索引b、减少系统负荷。同时为保障规范的落地执行,SQL 开发工具统一使用PL/SQL Developer,并使用统一的Beautifier设置和模板。

4.1 书写规范

4.1.1 大小写

保留字统一使用大写字符,其他字符除常量值外,一律使用小写字符。

4.1.2 对齐

SELECT、UPDATE、DELETE、INSERT、FROM、WHERE等保留字原则上要独立引领一行,保持左对齐并与其后字符保留空格;WHERE条件中"="两边各保留一个空格,条件Column 保持对齐。

示例:

语句名

格式

SELECT

SELECTcolumn1

,column2

,column3

FROMtable_name

WHEREcolumn1 = v_condition1

AND column2 = v_condition2

GROUPBYcolumn_name

ORDERBYcolumn_name;

4.1.3 别名

当一个SQL 语句中涉及到多个表时,应始终使用别名来限定字段名,避免含义模糊的引用;别名命名时,避免使用无意义的代号a、b 、c...,而应该有意义(如表mtl_system_items_b 对应别名为msi,po_headers_all别名对应为pha)。

4.2 SQL语句的索引使用

除特殊情况外,原则上SQL语句应使用索引,且一般要遵守以下规则。

4.2.1 避免索引列上的函数

如果函数中使用到索引列字段,则索引是不被利用的,可以通过改变SQL写法来回避。SUBSTR

不使用

SELECTe.ename

FROMemp e

WHERE SUBSTR(e.ename, 1, 1) = 'S';

使用

SELECTe.ename

FROMemp e

WHEREe.enameLIKE'S%';

以上假设emp表的ename建立了索引。

TO_CHAR、TO_DATE

不使用

SELECTe.ename

FROMemp e

WHERE TO_CHAR(e.hiredate,'YYYY/MM/DD') = '1981/11/17';

使用

SELECTe.ename

FROMemp e

WHEREe.hiredate = TO_DATE('1981/11/17','YYYY/MM/DD');

以上假设emp表的hiredate建立了索引。

NVL

不使用

SELECTe.ename

FROMemp e

WHEREnvl(https://www.wendangku.net/doc/22904054.html,m,0) <1000;

使用

SELECTe.ename

FROMemp e

https://www.wendangku.net/doc/22904054.html,m<1000;

以上假设emp表的comm建立了索引。

TRUNC

不使用

SELECTe.ename

FROMemp e

WHERE TRUNC(e.hiredate) BETWEENto_date('2005/01/01','YYYY/MM/DD') ANDto_date('2005/01/31','YYYY/MM/DD');

使用

SELECTe.ename

FROMemp e

WHEREe.hiredate>= to_date('2005/01/01','YYYY/MM/DD')

ANDe.hiredate

以上假设emp表的hiredate建立了索引。

4.2.2 避免索引列上的计算公式

如果索引列上使用了计算公式,则索引不能使用,可以通过更改计算公式来避免。

不使用

SELECTe.ename

FROMemp e

WHEREe.sal*1.1>900;

使用

SELECTe.ename

FROMemp e

WHEREe.sal>900/1.1;

以上假设emp表的sal建立了索引。

4.2.3 避免使用not in,使用not exists代替

使用not in时,可能导致从表索引无法使用,可以使用not exists来避免。

不使用

SELECTe.ename

FROMemp e

WHEREe.deptnoNOTIN (SELECTd.deptnoFROMdept d);

使用

SELECTe.ename

FROMemp e

WHEREe.deptnoNOTEXISTS (SELECT'x'FROMdept d WHEREd.deptno = e.deptno);

4.2.4 LIKE的使用

LIKE用于模糊检索,LIKE检索的样式有三种:前匹配(XX%)、中间匹配(X%X)、后匹配(%XX)。对于前匹配可以使用索引,而使用中间匹配和后匹配,都不能使用索引。因此除非必要,否则应尽量避免使用中间匹配和后匹配。

不使用

SELECTe.ename

FROMemp e

WHEREe.enameLIKE'%B';

使用

SELECTe.ename

FROMemp e

WHEREe.enameLIKE'B%';

4.2.5 复合索引的使用

要使用复合索引,where语句中必须包括复合索引中的所有列或前几个列。如果复合索引的第一个列不在where语句中则不能使用该复合索引。

不使用

SELECTe.ename

FROMemp e

WHEREe.job ='MANAGER';

使用

SELECTe.ename

FROMemp e

WHEREe.deptno = 20ANDe.job ='MANAGER';

使用

SELECTe.ename

FROMemp e

WHEREe.deptno = 20;

以上假设emp表的deptno, job建立了索引。

4.2.6 索引提示使用

对于特别的应用场景可利用hint固化执行计划,以使用正确索引。

4.3 SQL语句降低系统负荷

4.3.1 编写可再利用性的SQL语句

对已经运行过的SQL语句,Oracle会将它放在SQL缓冲池中,当有SQL需要运行时,Oracle会先从SQL缓冲池中查询是否该语句已经存在,如存在的话则直接执行,否则需要进行编译、解析的操作。因此编写可再利用的SQL语句可以提高系统性能。为了提高SQL语句的可再利用,必须注意以下两点:

遵守SQL编写规范:原则上,对于不是完全一样的SQL,oracle不会去再利用。即使是大小写不同,多了1个空格,都被认为是不同的SQL语句。所以,要彻底的遵循SQL/PLSQL编程规范,来保证SQL语句的再利用性。

利用变量绑定:当需要动态组合条件时,应避免直接将变量值组合到条件中去,而应该使用变量绑定,从而提高SQL语句的再利用性。

4.3.2 使用表别名

通过对表附加别名,SQL编译时可以明确列的来源表,从而使得SQL的编译时间缩短,另外还可以增加SQL语句的可读性。

4.3.3 ROWNUM的使用

ROWNUM可以限制检索数据的数量,如果为了判断对象是否存在,使用ROWNUM=1是非常有效的。

检索是否存在部门20的员工

SELECT'Y'

FROMemp e

WHEREe.deptno = 20

ANDROWNUM = 1;

注意:由于ROWNUM是获得数据的顺序号,在有ORDER BY子句的情况下,ROWNUM 列无法按分类有序递增。

4.3.4 UNION和UNION ALL

为了排除有UNION重复的data,系统自动进行分类处理。如果确定联合中不会出现重复数据的话,必须设定UNION ALL来取消自动分类以提高检索速度。

4.3.5 替代DISTINCT

使用DISTINCT将引起内部排序处理,如有可能,应尽量使用EXISTS、NOT EXISTS或子查询来避免。

使用DISTINCT

SELECTDISTINCTd.deptno,

d.dname

FROMdept d,

emp e

WHEREd.deptno = e.deptno;

使用EXISTS

SELECTd.deptno,

d.dname

FROMdept d

WHEREEXISTS (SELECT'x'FROMemp e WHEREd.deptno = e.deptno);

4.3.6 避免视图滥用

如果查询只检索基表的几个字段,应避免直接使用视图,造成不必要的数据块检索。视图

CREATEVIEWCRM_emp_v

SELECTe.empno,

e.ename,

e.sal,

d.deptno,

d.dname

FROMemp e,

dept d

WHEREe.deptno=d.deptno;

使用视图

SELECTe.empno, e.enameFROMCRM_emp_v;

使用基表

SELECTe.empno, e.enameFROMemp;

4.3.7 组合查询语句

尽量将几个简单的SQL语句组合成一个SQL进行查询,可以减少数据检索次数,提高检索效率,但会造成可读性较差。

组合前

SELECTe.sal

FROMemp e

WHEREe.ename = 'Jimmy';

SELECTAVG(e.sal)

FROMemp e

WHEREe.deptno = 20;

组合后

SELECTe.sal, d.sal_avg

FROM (SELECT e1.sal

FROMemp e1

WHERE e1.ename = 'Jimmy') e

(SELECTAVG(e2.sal) sal_avg

FROMemp e2

WHERE e2.deptno = 20 ) d;

4.3.8 WHERE条件中不调用自定义函数或过程

在WHERE条件中调用自定义函数或过程极易造成SQL性能严重降低,原则上应禁止使

用,除非十分有必要且能百分百保证此条件不会成为查询驱动条件。

4.3.9 避免强制类型转换

SQL中的字符类型数据应该统一使用单引号,特别对纯数字的字符串,必须用单引号,以免导致内部转换而引起性能问题或索引失效。

SQL中的变量、常量、表关联字段等与对应条件字段应保持相同类型或使用显式转换,避免数据库内部的强制转换。

5 PL/SQL编程规范

5.1 书写规范

5.1.1 SQL书写

SQL书写应符合SQL编写规范。

5.1.2 大小写

程序代码中要求保留字统一使用大写字符,其他字符除常量值外,一律使用小写字符;程序注释中不做大小写要求。

5.1.3 变量和参数

程序内部变量名称要求以"v_"开头;

输入参数名称要求以"p_"开头;

输出参数或变量名称要求以"x_"开头;

游标变量要求以"cur_"开头;

游标记录变量要求以"rec_"开头;

与表记录或字段关联的变量,变量类型统一使用%ROWTYPE或%TYPE,以便保持与相关表或字段一致。

5.2 常用数据库操作语句编码规范

语句名

格式

SELECT

SELECTcolumn1

,column2

,column3

INTOvariable1

,variable2

,varibale3

FROMtable_name

WHERE Condition1

AND Condition2

GROUPBYcolumn_name

ORDERBYcolumn_name;

注:SELECT,INTO,WHERE等保留字左对齐并与其后参数保留空格。Column尽量与其对应Variable对齐。

语句名

格式

UPDATE

UPDATEtable_name

SET column1 = value1

,column2 = value2

WHERE Condition;

注:UPDATE,SET,WHERE等保留字左对齐并与其后参数保留空格。"="两边各保留一个空格。Column保持对齐。

语句名

格式

INSERT

INSERTINTOtable_name( column1

,column2

,column3

)

VALUES( value1

,value2

,value3

);

注:"("紧跟table_name和VALUES,")"独立一行。Column尽量与其对应Variable对齐。语句名

格式

DELETE

DELETEFROMtable_name

WHERE Condition;

注:DELETE,WHERE等保留字左对齐并与其后参数保留空格。"="两边各保留一个空格。Condition保持对齐。

5.3 常用过程控制结构

结构名

格式

IF-ELSE

IF Condition THEN

...

ELSIF Condition THEN

...

ELSIF Condition THEN

...

ELSE

...

ENDIF;

注:模块中的缩进为4个空格,尽量不使用IF嵌套。

结构名

格式

LOOP

LOOP

variable:= variable + 1;

IFvariable = 10THEN

EXIT;

ENDLOOP;

LOOP

variable := variable + 1;

EXITWHENvariable = 10;

ENDLOOP;

注:模块中的缩进为4个空格,"="两边保留1个空格。

结构名

格式

FOR LOOP

FOR variable1 IN12 ..150LOOP

variable1 := variable1 + (variable2 * 10);

EXITWHEN variable1 >12900;

ENDLOOP;

结构名

格式

WHILE LOOP

WHILEvariable

SELECT variable1, variable2, variable3

INTO value1, value2, value3

FROMtable_name

WHERE variable4 = value4;

ENDLOOP;

5.4 Condition

规范内容

格式

所有复合条件必须使用括号来区分,且AND与OR右对齐

ANDConditionA

AND ((ConditonB)

OR (ConditionC))

对于空值的判断必须使用IS NULL/ IS NOT NULL

IFvariableISNULLTHEN

...

ENDIF;

避免使用Hard Code,特别是常数,必须使用Hard Code的情况,要符合注释规范要求错误:ORG_ID = 90

正确:ORG_ID = FND_PROFILE.VALUE('ORG_ID')

5.5 Cursor

规范内容

格式

Cursor必须显式定义, 不能隐式定义

隐式定义:

OPENcur_MeaningISSELECT ...

<>

FETCHcur_MeaningINTOvariable;

EXITWHENcur_Meaning%NOTFOUND;

ENDLOOPcur_Meaning_Loop;

显示定义:

DECLARE

CURSORcur_MeaningISSELECT ... ;

BEGIN

...

END;

Cursor可以显式使用, 也可以隐式使用

显式使用:

DECLARE

CURSORcur_MeaningISSELECT ... ;

BEGIN

...

OPENcur_Meaning;

LOOP

FETCHcur_MeaningINTO ... ;

...

EXITWHENcur_Meaning%NOTFOUND;

ENDLOOP;

CLOSECur_Meaning;

...

END;

隐式使用:

DECLARE

CURSORCur_MeaningISSELECT ... ;

BEGIN

...

FORvariable_recINCur_MeaningLOOP

ENDLOOP;

...

END;

5.6 变量定义与赋值

规范内容

格式

变量用":="赋值,":="两边保留1个空格;

v_meaning := value

不等号用"<>"表示,"<>"两边保留1个空格;

v_variable1 <> variable2

用于查询数据库的变量类型与数据库中对应变量类型相同DECLARE

v_meaningtablename.column1%type;

SELECT column1

INTOv_meaning

FROMtablename;

END;

5.7 过程与函数调用

规范内容

格式

调用Procedure/Function的参数对齐

CUX_EMPLOYEE_PRC( value1

,value2

,value3);

建议调用Procedure / Function的参数时使用显式调用并对齐

XXX_EMPLOYEESAV_PRC( P_parameter1 => value1

,P_parameter2 => value2

,P_parameter3 => value3);

5.8 例外处理(Exception)

规范内容

格式

所有的SELECT INTO SQL都必须有Exception, 必须包括NO_DATA_FOUND, TOO_MANY_ROWS 和OTHERS处理; 每一句SELECT语句必须有自己的Exception处理

BEGIN

SELECT

INTO

FROM

WHERE condition;

EXCEPTION

WHENno_data_foundTHEN

...

WHENtoo_many_rowsTHEN

...

WHENOTHERSTHEN

...

END;

对Cursor的NO_DATA_FOUND例外,必须要有Exception Handle;在处理Exception时,必须将所用到的Cursor关闭

DECLARE

CURSORCur_MeaningISSELECT ... ;

BEGIN

OPENCur_Meaning;

FETCHCur_MeaningINTO ...;

EXCEPTION

WHEN NO_DATA_FOUND THEN

...

IFCur_Meaning %ISOPENTHEN

CLOSECur_Meaning;

ENDIF;

END;

5.9 例外处理的错误消息

不允许在程序中写死错误消息或提示信息,而应分系统统一定义消息和调用接口;每个消息应有唯一代码,程序中仅需通过接口调用消息代码;消息内容应支持变量替代(&代表变量定义),以便灵活显示消息内容。

错误消息定义示例(未考虑多语言):

消息名称

模块简称

消息内容

XXX_NO_DATA_FOUND

XXX

No data found when find &FINDING !

Condition: &CONDITION

XXX_TOO_MANY_ROWS

XXX

More than one record found when find &FINDING !

Condition: &CONDITION

XXX_OTHERS_ERROR

XXX

Fetal Error when find &FINDING !

Error: &ERROR

错误消息调用示例:

规范内容

格式

调用已定义的错误消息

BEGIN

SELECTunit_price

INTOv_unit_price

FROMoe_order_lines_all

WHEREline_id = v_line_id;

EXCEPTION

WHEN NO_DATA_FOUND THEN

xxx_message.set_name('XXX','XXX_NO_DATA_FOUND');

xxx_message.set_token('FINDING','unit_price');

xxx_message.set_token('CONDITION','LINE_ID = '||to_char(v_line_id));

xxx_message.error; --抛出错误消息

WHEN TOO_MANY_ROWS THEN

xxx_message.set_name('XXX','XXX_TOO_MANY_ROWS');

xxx_message.set_token('FINDING','unit_price');

xxx_message.set_token('CONDITION','LINE_ID = ' ||to_char(v_line_id));

xxx_message.error; --抛出错误消息

WHENOTHERSTHEN

fnd_message.set_name('CUX','CUX_OTHERS_ERROR');

fnd_message.set_token('FINDING','unit_price');

fnd_message.set_token('ERROR',substr(SQLERRM, 1, 200));

fnd_message.error;

END;

5.10 注释(Comment)

规范内容

格式

程序头部注释

/*===============================================

Copyright (C) xxx Application

AllRights Reserved

================================================

* ===============================================

* PROGRAM NAME:

*

* DESCRIPTION:

*

* HISTORY:

* 1.00 mm/dd/yyyy Author Name

* Creation Description

* 1.01 mm/dd/yyyy Author Name

* Changes Description

* ==============================================*/

在每一个Procedure/Function的开始放置程序注释, 只在Package Header中即可/* =============================================

* FUNCTION / PROCEDURE

* NAME £o

* DESCRIPTION:

*

* ARGUMENT: p_sequences_id IN -- 序列标识

*

* RETURN: x_price OUT - 价格

* HISTORY:

* 1.00 mm/dd/yyyy Author Name

* Creation Description

* 1.01 mm/dd/yyyy Author Name

* Changes Description

* =============================================*/

在每一个变量声明的旁边添加注释

DECLARE

v_UOM_codetable.column%TYPE; -- 物料单位

v_flagvarchar2(1); -- Y/N 用于控制是否继续

IF语句必须加注释,给出注释来说明不同条件下不同的处理逻辑

IFconditionATHEN

...

ELSIFconditionBTHEN-- IF conditionA THEN

...

ELSE-- IF conditionA THEN

...

ENDIF; -- IF conditionA THEN

LOOP循环必须加注释

FOR cur in cur_1 LOOP

...

ENDLOOP;-- FOR cur in cur_1 LOOP

其它必须加注释的情况

1、使用Hard Code时必须注释,解释使用Hard Code的原因

2、使用rownum时必须注释,解释使用rownum的原因

3、修改原有程序(包括Standard 的源程序和客户化程序)时必须加注释, 格式如下:

-- Begin: Edit by author Time To (fix, update...)

Your code is here......

-- End: Edit by author.

4、调用通用接口时必须注释,解释其作用

5、对接口表之外的table进行DML操作(Update, Insert, Delete)时必须加注释,说明理由5.11 应用调试控制

5.11.1 调试开关

在同一系统内,要有一套统一的调试接口库及详细说明,且调试开关可在应用界面设置,调试开关无论打开或关闭,都不应影响程序正常功能。

具体PL/SQL程序中,关键节点必须检查调试开关设置值,并决定是否调用调试接口库,其他节点可适当添加。

5.11.2 调试信息

调试接口库要有统一的调试信息输出格式,并支持应用前台或数据库后台查看输出结果。5.12 并发控制

5.12.1 并发冲突

进行数据操作的事务处理的程序,必须考虑并发机制下的可能冲突,从冲突的发生源来看,分为自身冲突和外部冲突。自身冲突主要是指当本程序有多个实例运行,且操作的数据范围有交集时,发生的互相等待或数据不一致问题。外部冲突主要是指本程序运行时,需操作的数据全部或部分已经被其他正在运行的程序锁定或处理,因此造成本程序运行异常。

5.12.2 冲突预防机制

针对并发运行可能产生的各种冲突,需根据情况选择加锁或不兼容处理,加锁是指程序开始运行时,先对需处理的数据集请求数据库锁,并程序运行结束前,释放相关锁。不兼容是指程序运行前,必须先判断是否有可能发生冲突的程序已经运行,如果有则等待或退出运行,请提醒用户。不兼容机制分为系统级和程序级,客制化系统开发时,需建立系统级统一的不兼容机制,程序级在单个程序开发时实现。

5.13 代码测试、维护

5.13.1 单元测试要求至少达到语句覆盖

5.13.2 单元测试开始要跟踪每一条语句,并观察数据流及变量的变化

5.13.3 清理、整理或优化后的代码要经过审查及测试。

5.13.4 代码版本升级要经过严格测试

5.13.5 使用工具软件对代码版本进行维护

5.13.6 正式版本上软件的任何修改都应有详细的文档记录

5.13.7 其他

5.13.7.1 发现错误立即修改,并且要记录下来。

5.13.7.2 仔细设计并分析测试用例,使测试用例覆盖尽可能多的情况,以提高测试用例的效率。

5.13.7.3 尽可能模拟出程序的各种出错情况,对出错处理代码进行充分的测试。

5.13.7.4 仔细测试代码处理数据、变量的边界情况。

5.13.7.5 保留测试信息,以便分析、总结经验及进行更充分的测试。

5.13.7.6 不应通过"试"来解决问题,应寻找问题的根本原因。

5.13.7.7 对自动消失的错误进行分析,搞清楚错误是如何消失的。

5.13.7.8 修改错误不仅要治表,更要治本。

5.13.7.9 测试时应设法使很少发生的事件经常发生。

5.13.7.10 明确模块或函数处理哪些事件,并使它们经常发生。

5.13.7.11 坚持在编码阶段就对代码进行彻底的单元测试,不要等以后的测试工作来发现问题。

5.13.7.12 去除代码运行的随机性(如去掉无用的数据、代码、内部变量等),让函数运行的结果可预测,并使出现的错误可再现。

xx

第2页, 共4页

xxx-Oracle数据库开发规范

ORACLE数据库安全规范

数据库安全规范

1概述 1.1适用范围 本规范明确了Oracle数据库安全配置方面的基本要求。 1.2符号和缩略语 2 ORACLE安全配置要求 本规范所指的设备为ORACLE数据库。本规范提出的安全配置要求,在未特别说明的情况下,均适用于ORACLE数据库。 本规范从ORACLE数据库的认证授权功能和其它自身安全配置功能提出安全要求。 2.1账号 ORACLE应提供账号管理及认证授权功能,并应满足以下各项要求。 2.1.1按用户分配帐号

2.1.2删除或锁定无关帐号 2.1.3用户权限最小化 要求内容 在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权

限。

grant 权限 to user name; revoke 权限 from user name; 2、补充操作说明 用第一条命令给用户赋相应的最小权限 用第二条命令收回用户多余的权限 业务测试正常 4、检测操作 业务测试正常 5、补充说明 2.1.4使用ROLE 管理对象的权限 1. 使用Create Role 命令创建角色。 2.使用用Grant 命令将相应的系统、对象或 Role 的权限赋予应用用户。 2、补充操作说明 对应用用户不要赋予 DBA Role 或不必要的权限。 4、检测操作 1.以DBA 用户登陆到 sqlplus 中。 2.通过查询 dba_role_privs 、dba_sys_privs 和 dba_tab_privs 等视图来检查 是否使用ROLE 来管理对象权限。 5、补充说明 操作指南 1、参考配置操作 检测方法 3、判定条件 要求内容 使用数据库角色(ROLE )来管理对象的权限。 操作指南 1、参考配置操作 检测方法 3、判定条件

ORACLE数据库设计规范

1命名原则 1.1约定 u是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定; U命名使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割 u避免使用Oracle的保留字如LEVEL、关键字如TYPE (见Oracle保留字和关键字); u各表之间相关列名尽量同名; u除数据库名称长度为1 — 8个字符,其余为1 — 30个字符,Database link 名称也不要超过30个字符; u命名只能使用英文字母,数字和下划线; 1.2表名 规则如下: 命名规则为xxx_yyy_TableName 。xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy 表示子系统中的子模块的名称(可以没有),最多五个字母构成,尽量用简称;TableName 为表含义,最多十个字母构成,尽量用简称 TableName 规则如下: u使用英文单词或词组作为表名,不得使用汉语拼音 u用名词和名词短语作表名 u不使用复数 正确的命名,例如: fiber_sys_user fiber_biz_order 1.3存储过程 规则如下: 命名规则为xxx_yyy_StoredProcedureName 。xxx表示开发公司的名称,最多五个字母构成,尽量用 简称;yyy表示子系统中的子模块的名称(可以没有),最多五个字母构成,尽量用简称;

StoredProcedureName 规则如下: u用动词或动词短语来命名,并带有宾语 u需要符合用Pascal命名规则。 u尽量谨慎地使用缩写 u尽量不要和关键字重合 u不要用任何名前缀(例如U , B) u StoredProcedureName 内不使用下划线 u当操作依赖条件时,一般结尾使用By+条件 存储过程正确的命名,例如: sys_lnsertUser sys_SearchUserByUserlD sys_DeleteUserByUserlD 1.4视图 规则如下: u视图的命名采用xxx_yyy_ ViewName_v 。xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy表示子系统中的子模块的名称(可以没有),最多五个字母构成,尽量用简称;_v后缀表示视图, ViewName 部分表示视图的含义,最多十个字母构成,尽量用简称。 ViewName 规则如下: u用名词和名词短语, u不使用复数 u用Pascal命名规则 u尽量谨慎地使用缩写 u尽量不要和关键字重合 u不要用任何名前缀(例如U,B) u ViewName 中使用下划线 视图正确的命名,例如:

软件工程-数据库设计规范与命名规则

数据库设计规范、技巧与命名规范 一、数据库设计过程 数据库技术是信息资源管理最有效的手段。 数据库设计是指:对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据, 满足用户信息要求和处理要求。 数据库设计的各阶段: A、需求分析阶段:综合各个用户的应用需求(现实世界的需求)。 B、在概念设计阶段:形成独立于机器和各DBMS产品的概念模式(信息世界模型),用E-R图来描述。 C、在逻辑设计阶段:将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。 然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。 D、在物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。 1. 需求分析阶段 需求收集和分析,结果得到数据字典描述的数据需求(和数据流图描述的处理需求)。 需求分析的重点:调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 需求分析的方法:调查组织机构情况、各部门的业务活动情况、协助用户明确对新系统的各种要求、确定新系统的边界。 常用的调查方法有:跟班作业、开调查会、请专人介绍、询问、设计调查表请用户填写、查阅记录。 分析和表达用户需求的方法主要包括自顶向下和自底向上两类方法。自顶向下的结构化分析方法(Structured Analysis, 简称SA方法)从最上层的系统组织机构入手,采用逐层分解的方式分析系统,并把每一层用数据流图和数据字典描述。 数据流图表达了数据和处理过程的关系。系统中的数据则借助数据字典(Data Dictionary,简称DD)来描述。 2. 概念结构设计阶段 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。 概念模型用于信息世界的建模。概念模型不依赖于某一个DBMS支持的数据模型。概念模型可以转换为计算机上某一 DBMS 支持的特定数据模型。 概念模型特点: (1) 具有较强的语义表达能力,能够方便、直接地表达应用中的各种语义知识。 (2) 应该简单、清晰、易于用户理解,是用户与数据库设计人员之间进行交流的语言。 概念模型设计的一种常用方法为IDEF1X方法,它就是把实体-联系方法应用到语义数据模型中的一种语义模型化技术, 用于建立系统信息模型。 使用IDEF1X方法创建E-R模型的步骤如下所示:

Oracle数据库数据对象分析_张达宇

Oracle数据库数据对象分析 日期:2006-01-18 08:00 点击: Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。 表和视图 Oracle中表是数据存储的基本结构。ORACLE8引入了分区表和对象表,ORACLE8i引入了临时表,使表的功能更强大。视图是一个或多个表中数据的逻辑表达式。本文我们将讨论怎样创建和管理简单的表和视图。 管理表 表可以看作有行和列的电子数据表,表是关系数据库中一种拥有数据的结构。用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。例如: 这样我们就建立了一个名为products的表,关键词CREATE TABLE后紧跟的表名,然后定义了三列,同时规定了列的数据类型和大小。 在创建表的同时你可以规定表的完整性约束,也可以规定列的完整性约束,在列上普通的约束是NOT NULL,关于约束的讨论我们在以后进行。 在建立或更改表时,可以给表一个缺省值。缺省值是在增加行时,增加的数据行中某一项值为null时,oracle即认为该值为缺省值。 下列数据字典视图提供表和表的列的信息: . DBA_TABLES . DBA_ALL_TABLES . USER_TABLES . USER_ALL_TABLES . ALL_TABLES . ALL_ALL_TABLES . DBA_TAB_COLUMNS . USER_TAB_COLUMNS . ALL_TAB_COLUMNS 表的命名规则 表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。表名应该以字母开始,可以在表名中包含数

数据库设计规范

数据库设计规范 V 1.0 2007-8-28

目录 1) 目的 (3) 2) 范围 (3) 3) 术语 (3) 4) 设计概要 (3) 5) 命名规范(逻辑对象) (4) 6) 数据库对象命名 (6) 7) 脚本注释 (8) 8) 数据库操作原则 (9) 9) 常用字段命名(参考) (9)

1) 目的 为了统一公司软件开发的设计过程中关于数据库设计时的命名规范和具体工作时的编程规范,便于交流和维护,特制定此规范。 2) 范围 本规范适用于开发组全体人员,作用于软件项目开发的数据库设计、维护阶段。 3) 术语 数据库对象:在数据库软件开发中,数据库服务器端涉及的对象包括物理结构和逻辑结构的对象。 物理结构对象:是指设备管理元素,包括数据文件和事务日志文件的名称、大小、目录规划、所在的服务器计算极名称、镜像等,应该有具体的配置规划。一般对数据库服务器物理设备的管理规程,在整个项目/产品的概要设计阶段予以规划。 逻辑结构对象:是指数据库对象的管理元素,包括数据库名称、表空间、表、字段/域、视图、索引、触发器、存储过程、函数、数据类型、数据库安全性相关的设计、数据库配置有关的设计以及数据库中其他特性处理相关的设计等。 4) 设计概要 ?设计环境 数据库:ORACLE 9i 、MS SQL SERVER 2000 等 操作系统:LINUX 7.1以上版本,显示图形操作界面; RedHat 9 以上版本 WINDOWS 2000 SERVER 以上 ?设计使用工具 使用PowerDesigner 做为数据库的设计工具,要求为主要字段做详尽说 明。对于SQL Server 尽量使用企业管理器对数据库进行设计,并且要求 对表,字段编写详细的说明(这些将作为扩展属性存入SQL Server中) 通过PowerDesigner 定制word格式报表,并导出word文档,作为数据 字典保存。(PowerDesigner v10 才具有定制导出word格式报表的功能)。

oracle11g数据库管理与开发第7章答案.

第7章安全管理 一、填空题 1.Oracle数据库用户口令认证可以采用数据库验证、外部验证、全局验证等几种方式。 2.Oracle数据库概要文件主要用于资源管理、控制口令等。 3.Oracle数据库中的权限分为系统权限和对象权限两种类型,向用户直接授权需要grant权限to用户SQL语句。 4.用户连接Oracle数据库后希望得到角色权限,这有两种实现方法:一种方法是让管理员把角色设置为用户默认角色,另一种方法是向用户授予角色,需调用的SQL语句是grant 角色to用户。 二、简答题 1.简要说明在oracle数据库内普通用户口令认证和管理员口令认证都有哪些方法? 答:oracle数据库普通用户口令认证有以下3种认证方法: (1)数据库认证(2)外部认证(3)全局认证 管理员口令认证有以下3种认证方法: (1)口令文件认证(2)操作系统认证(3)基于网络认证服务认证 2.简述用户通过默认角色和非默认角色获得权限有何异同? 答:用户通过默认角色获得权限时,用户默认角色在用户连接后被自动激活,所以用户不用显式启用角色就可以立即获得它们所具有的权限。而通过非默认角色获得权限时,必须通过命令调用为其授权,才能使非默认角色获权。 三、实训题 1.请创建一个用户books_pub,要求他第一次登录时必须修改口令,将其默认表空间和默认临时表空间分别设置为books_pub和temp,并在表空间users,demots和books_pub上分别为他分配10MB,10MB和50MB的存储空间。 create tablespace books_pub//创建books_pub表 datafile'f:\app\administrator\admin\orcl\hcy_1.dbf'size5M; create tablespace demots//创建demots表 datafile'f:\app\administrator\admin\orcl\hcy_2.dbf'size5M; create user books_pub//创建books_pub用户 identified by123 password expire default tablespace books_pub temporary tablespace temp quota10M on users quota10M on demots quota50M on books_pub; 2.把创建会话的系统权限,以及scott用户dept表和emp表上的所有对象授予用户books_pub。

oracle数据库试题

ORACLE数据库试题 74 姓名:戴希引 一、选择题(总分50分,每题1分,*为多选)42 1.下列不属于ORACLE的逻辑结构的是(C) A 区 B 段 C 数据文件 D表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户( A ) A . SYSDBA B. SYSTEM C. SCOTT D. SYS 3 下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表(A ) A 授予了CONNECT的角色,但没有授予RESOURCE的角色 B没有授予用户系统管理员的角色 C数据库实例没有启动 D数据库监听没有启动 4. 在Oracle中,当FETCH语句从游标获得数据时,下面叙述正确的是( C ) A 游标打开 B游标关闭 C当前记录的数据加载到变量中 D创建变量保存当前记录的数据 5. 在Oracle中,下面关于函数描述正确的是( A D)* A SYSDATE函数返回Oracle服务器的日期和时间 B ROUND数字函数按四舍五入原则返回指定十进制数最靠近的整数 C ADD_MONTHS日期函数返回指定两个月份天数的和 D SUBSTR函数从字符串指定的位置返回指定长度的子串 6. 阅读下面的PL/SQL程序块: BEGIN INSERT INTO employee(salary,last_name,first_name)VALUES(35000,’Wang’,'Fre d ’); SAVEPOINT save_a; INSERT INTO employee(salary,last_name,first_name) VALUES(40000,’Woo’,'David’); SAVEPOINT save_b; DELETE FROM employee WHERE dept_no=10; SAVEPOINT save_c; INSERT INTO employee(salary,last_name,first_name) VALUES(25000,’Lee’,'Bert’); ROLLBACK TO SAVEPOINT save_c;

Oracle数据库基本知识点

1、数据库基本语句 (1)表结构处理 创建一个表:cteate table 表名(列1 类型,列2 类型); 修改表的名字 alter table 旧表名 rename to 新表名 查看表结构 desc 表名(cmd) 添加一个字段 alter table 表名 add(列类型); 修改字段类型 alter table 表名 modify(列类型); 删除一个字段 alter table 表名 drop column列名; 删除表 drop table 表名 修改列名 alter table 表名 rename column 旧列名 to 新列名; (2)表数据处理 增加数据:insert into 表名 values(所有列的值); insert into 表名(列)values(对应的值); 更新语句:update 表 set 列=新的值,…[where 条件] 删除数据:delete from 表名 where 条件 删除所有数据,不会影响表结构,不会记录日志, 数据不能恢复--》删除很快: truncate table 表名 删除所有数据,包括表结构一并删除: drop table 表名 去除重复的显示:select distinct 列 from 表名 日期类型:to_date(字符串1,字符串2)字符串1是日期的字 符串,字符串2是格式 to_date('1990-1-1','yyyy-mm-dd')-->返回日期的 类型是1990-1-1 (3)查询语句 1)内连接 select a.*,b.* from a inner join b on a.id=b.parent_id

Oracle数据库设计规范建议

Oracle数据库设计规范建议 1 目的 本规范的主要目的是希望规范数据库设计,尽量提前避免由于数据库设计不当而产生的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好的保证。 数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。 2 适用范围 本规范的适用人员范围包括我司的所有应用开发人员以及在我司承接数据库应用开发的软件人员。 本规范的适用IT范围包括数据库对象的命名规范、设计原则、SQL语句的设计和使用、SQL语句的性能优化建议、其他与性能有关的设计原则以及设计工具的选择。 3 数据对象的命名规范 3.1 通用规范 3.1.1 使用英文:要用简单明了的英文单词,不要用拼音,特别是拼音缩写。主要目的很明确,让人容易明白这个对象是做什么用的; 3.1.2 一律大写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常的习惯,最好一律用大写; 3.2 数据库对象命名规范 3.2.1 表的命名 3.2.1.1 表名的前缀:前缀_表名_T。为表的名称增加一个或者多个前缀,前缀名不要太长,可以用缩写,最好用下划线与后面的单词分开;其目的有这样几个:3.2.1.1.1 为了不与其他项目或者其他系统、子系统的表重名; 3.2.1.1.2 表示某种从属关系,比如表明是属于某个子系统、某个模块或者某个项目等等。表示这种从属关系的一个主要目的是,从表名能够大概知道如何去找相关的人员。比如以子系统为前缀的,当看到这个表的时候,就知道有问题可以去找该子系统的开发和使用人员; 3.2.2 视图命名:相关表名_V(或者根据需要另取名字); 3.2.3 程序包命名:程序包名_PKG(用英文表达程序包意义); 3.2.4 存储过程命名:存储过程名_PRO(用英文表达存储过程意义);

浅谈对的理解对象—关系型数据库

浅谈对对象—关系型数据库的理解 姓名:杨小敏 学号:2010206190026

针对对象—关系型数据库的理解我想结合自己的专业(地图学与地理信息系统)从下面三个方面来理解:(1)关系型数据的发展以及在空间数据管理方面的优缺点(2)面向对象数据库的发展及在空间数据管理方面的优缺点(3)关系型数据库和面向对象技术的融合在数据库发展中所起到的独特作用在我们GIS专业领域内,随着信息技术的发展,各种应用系统建设的不断深入,像现在面向21世纪的应急应用系统的建设、城市基础地理空间信息数据库系统与共享平台的建设、地理信息公共服务平台的建设,小到“数字城市”的建设,大到“数字地球”乃至“智慧地球”的建设,我们已经开始不满足数值和文字的信息处理,为了达到系统建设平台尤其是公共服务平台的建设起到良好的客户友好体验,大量的图形信息,音频信息已经深入到数据库的设计中,其中尤其是空间数据库管理备受瞩目。所以,面对信息爆炸的21世纪,海量数据的存储和管路已经不是传统的数据库能解决的,空间数据管理需要更强的数据库——对象关系型数据库。 为什么空间数据需要对象关系型数据库的管理才更有效?我想简单的说一下GIS空间数据的基本特征:(1)空间特征:每个空间对象都具有空间坐标,所以在存储空间数据的同时我们要考虑数据的空间分布特征;(2)非结构化特征:通用数据库或者是传统数据库数据记录一般是结构化的,在面对空间图形信息的时候难以直接采用关系数据管理系统;(3)空间关系特征:空间数据的空间关系最重要的就是空间拓扑关系,这种拓扑结构方便了空间数据的查询和空间分析,但是给空间数据的一致性和完整性的维护增加了复杂性;(4)海量数据的特征:数据库在面对海量数据的存储和组织时,一般在二维空间上划分块或图幅,在垂直的方向上划分层在组织海量空间数据。 在空间数据的管理技术的发展中,从手工管理管理阶段到文件管理阶段再到数据库管理阶段,在三个数据管理阶段,对数据管理方式也不尽相同,在这里,我想说的是空间数据库的发展历史对空间数据管理的影响,第一是层次关系型数据库:只是数据库发展的初级阶段,这是空间数据的管理大多用文件方式管理,很显然不适合管理海量的空间数据,所以淘汰;第二是网络关系型数据库:在一定程度上解决了空间数据复杂管理的难题,但还是被日益崛起的关系型数据库所淘汰;第三是关系型数据库的发展:为了解决难于保证数据的完整性,开始将空

Oracle数据库期末复习知识点整理

基础知识 表3.2 Oracle数据类型

表3.3 XSB的表结构

操作表 创建表 CREATE TABLE [schema.] table_name ( column_namedatatype [DEFAULT expression] [column_constraint][,…n] [,…n] ) [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace_name] [STORGE storage_clause] [CLUSTER cluster_name(cluster_column,…n)] [ENABLE | DISABLE ] [AS subquery] 【例】使用CRETE TABLE命令为XSCJ数据库建立表XSB,表结构参照表3.3。 打开SQL*Plus工具,以system方案连接数据库,输入以下语句: CREATE TABLE XSB ( XH char(6) NOT NULL PRIMARY KEY, XM char(8) NOT NULL, XB char(2) DEFAULT '1' NOT NULL, CSSJ date NOT NULL, ZY char(12) NULL, ZXF number(2) NULL, BZ varchar2(200) NULL ); 修改表 ALTER TABLE [schema.] table_name [ ADD(column_namedatatype [DEFAULT expression][column_constraint],…n) ] /*增加新列*/ [ MODIFY([ datatype ] [ DEFAULT expression ] [column_constraint],…n) ] /*修改已有列的属性*/ [ STORAGE storage_clause ] *修改存储特征*/ [ DROP drop_clause ] /*删除列或约束条件*/ 【例】使用ALTER TABLE语句修改XSCJ数据库中的表。

Oracle数据库开发规范

项目编号:××× xxx Oracle数据库开发规范 Oracle DB Development Standardization <部门名称> **年**月**日 文档信息: 文档名称: 文档编号: 文档版本日期: 起草人: 起草日期: 复审人: 复审日期: 版本历史: 版本 日期 作者 更改参考 说明

审批信息: 签字/日期 审核 审批 目录 1 概述 4 1.1 编写目的 4 1.2 文档约定 4 1.3 预期的读者和阅读建议 4 1.4 参考文献 5 2 数据库对象命名 6 2.1 命名总体原则 6 2.2 表名 6 2.3 视图 6 2.4 同义词 6 2.5 序列7 2.6 索引7 2.7 存储过程7 2.8 存储函数8 2.9 存储程序包8 2.10 触发器8 2.11 字段8 2.12 其他9 3 设计规范9 3.1 范围9 3.2 表空间9 3.3 字符集10 3.4 主外键约束10 3.5 分区表10 3.6 RAC下的序列设计10 3.7 字段10 3.8 表结构设计11 3.9 索引设计11 3.10 临时表11 4 SQL编写规范 12 4.1 书写规范12 4.2 SQL语句的索引使用13 4.3 SQL语句降低系统负荷 15 5 PL/SQL编程规范18

5.1 书写规范18 5.2 常用数据库操作语句编码规范19 5.3 常用过程控制结构20 5.4 Condition 21 5.5 Cursor 22 5.6 变量定义与赋值22 5.7 过程与函数调用23 5.8 例外处理(Exception) 23 5.9 例外处理的错误消息24 5.10 注释(Comment) 25 5.11 应用调试控制27 5.12 并发控制27 5.13 代码测试、维护29 1 概述 1.1 编写目的 为规范软件开发人员的Oracle数据库开发提供参考依据和统一标准。 1.2 文档约定 说明本文档中所用到的专用术语定义或解释,缩略词定义。 1.3 预期的读者和阅读建议 本文档适用于所有开发员。 1.4 参考文献 列出有关的参考文件,如: a.属于本项目的其他已发表文件; b.本文件中各处引用的文档资料。 列出这些文件的标题、作者,说明能够得到这些文件资料的来源。 2 数据库对象命名 2.1 命名总体原则 本规范所涉及数据库对象主要是指表、视图、同义词、索引、序列、存储过程、函数、触发器等; 命名应使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割;避免使用Oracle的保留字或关键字,如LEVEL和TYPE; 各表之间相关列名尽量同名; 除数据库模式对象名称长度为1-8个字符,其余对象名称均要求不超过30个字符; 命名只能使用大写英文字母,数字和下划线,且以英文字母开头。 2.2 表名 规则:XXX_MMM_DDDD 说明:XXX代表子系统或模块名称(2-3个字母构成); MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有); DDDD为表的简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音。 示例:PO_HEADERS_ALL 2.3 视图 规则:XXX_MMM_DDDD_V 说明:XXX代表子系统或模块名称(2-3个字母构成);

Oracle命名规则

数据库命名规则 2007-09-27 00:21:38| 分类:UML |字号订阅 数据库涉及字符规则 采用26个英文字母(区分大小写)和0 -9这十个自然数,加上下划线_组成,共63个字符。不能出现其他字符(注释除外)。 数据库对象命名规则 数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字由前缀和实际名字组成,长度不超过30。前缀:使用小写字母。 例如: 实际名字 实际名字尽量描述实体的内容,由单词或单词组合,每个单词的首字母大写,其他字母小写,不以数字和_开头。 因此,合法的对象名字类似如下。 数据库表命名规则 1)字段由前缀和实际名字组成。实际名字中首单词一个系统尽量采取同一单词。

前缀:使用小写字母tb,表示表。 例如:tbMember tbMember_Info tbForum_Board tbForum_Thread1 2) 表以名词或名词短语命名,确定表名是采用复数还是单数形式,此外给表的别名定义简单规则(比方说,如果表名是一个单词,别名就取单词的前4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成4 个字母长的别名;如果表的名字由3 个单词组成,从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成4 字母长的别名,其余依次类推)对工作用表来说,表名可以加上前缀WORK_ 后面附上采用该表的应用程序的名字。在命名过程当中,根据语义拼凑缩写即可。注意,由于ORCLE会将字段名称统一成大写或者小写中的一种,所以要求加上下划线。 举例: 定义的缩写Sales: Sal 销售; Order: Ord 订单; Detail: Dtl 明细; 则销售订单明细表命名为:Sal_Ord_Dtl; 3) 如果表或者是字段的名称仅有一个单词,那么建议不使用缩写,而是用完整的单词。 举例: 定义的缩写Material Ma 物品; 物品表名为:Material, 而不是Ma. 但是字段物品编码则是:Ma_ID;而不是Material_ID 4) 所有的存储值列表的表前面加上前缀Z 目的是将这些值列表类排序在数据库最后。 5) 所有的冗余类的命名(主要是累计表)前面加上前缀X 冗余类是为了提高数据库效率,非规范化数据库的时候加入的字段或者表6) 关联类通过用下划线连接两个基本类之后,再加前缀R的方式命名,后面按照字母顺序罗列两个表名或者表名的缩写。 关联表用于保存多对多关系。 如果被关联的表名大于10个字母,必须将原来的表名的进行缩写。如果没有其他原因,建议都使用缩写。 举例:表Object与自身存在多对多的关系,则保存多对多关系的表命名为:R_Object; 表Depart和Employee;存在多对多的关系;则关联表命名为 R_Dept_Emp 附加:[表类型_]+ 表名 如果是系统公用表,[表类型_]+ 表名 如果是数据表,省略表类型部分 表名取英文全名

ORACLE数据库学习心得

ORACLE数据库结课论文 一个好的程序,必然联系着一个庞大的数据库网路... 今年我们学习了oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于oracle数据库的一些知识。 1.ORACLE的特点: 可移植性ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。 可联结性对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。 2.ORACLE的总体结构 (1)ORACLE的文件结构一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。 数据文件一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。 日志文件须有两个或两个以上,用来记录所有数据库的变化,

用于数据库的恢复。控制文件可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件含有数据库例程起时所需的配置参数。 (2)ORACLE的内存结构一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。 SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。 PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。 (3)ORACLE的进程结构ORACLE包括三类进程: ①用户进程用来执行用户应用程序的。 ②服务进程处理与之相连的一组用户进程的请求。 ③后台进程ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括: DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。 SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON (Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。

Oracle数据库技术课程学习大纲详细

《现代数据库技术》教学大纲 课程名称:《现代数据库技术》 课程编号:学时数:56 学分数:3.5 适应专业:计算机与信息学院所有专业 一、本课程的地位、任务和作用 现代数据库技术是计算机在数据处理应用领域中的主要内容和坚实基础;也是今后若干年内研究和应用的最活跃的分支之一。因此,信息管理、软件开发、计算机等专业的学生,特别是以应用为目标的学生都必须学习和具备数据库原理与应用的知识。本课程通过介绍Oracle数据库基本操作、体系结构与数据库基本管理使学生初步掌握大型数据库的基本原理,了解大型数据库的管理方法。了解大型数据库的管理方法,使学生熟练掌握Oracle数据库系统下的SQL语言运用及PL/SQL程序设计。 本课程是一门理论和实践相结合的课程,要求学生在完成本课程的学习以后,能够结合自己所熟悉的某一门高级语言和Oracle,开发出一个小型的数据库应用系统。 二、本课程的相关课程 本课程的先修课程为《计算机组成原理》,《离散数学》,《数据结构》,《计算机网络》及《数据库原理》等课程。 三、本课程的基本内容及要求 教学内容: 第一章数据库概述(2学时) 1、教学内容: 1.1数据库基础知识 1.2关系数据库系统 1.3 Oracle基础知识 (1)Oracle的发展历史 (2)Oracle的特点 第二章O racle体系结构(6学时) 1、教学内容: 2.1 Oracle 体系结构概述 2.2Oracle的存储结构 (1)物理存储结构 (2)逻辑存储结构 2.3Oracle的实例 (1)Oracle内存结构

(2)Oracle进程 2.4数据字典 2、教学重点:Oracle的物理结构、oracle实例、Oracle的逻辑结构 3、教学难点:数据库实例与进程 第三章O racle11g的安装(2学时) 1、教学内容: 3.1 Oracle 11g环境介绍 3.2Oracle 11g for Windows的安装 (1)安装Oracle 11g服务器 (2)Oracle 11g与Windows (3)安装Oracle 11g客户端 3.3 Oracle 11g 的卸载 2、教学重点:学会Oracle的安装 第四章O RACLE数据库管理工具及网络配置(2学时) 1、教学内容: 4.1 SQL*Plus命令 (1)设置SQL*Plus 运行环境 (2)常用SQL*Plus命令 (3)格式化查询结果 4.2 Oracle企业管理器 4.3 数据库配置助手 4.4 启动与关闭oracle实例 2、教学重点:学会使用SQL*Plus 第五章S QL语言基础(5学时) 1、教学内容: 5.1SQL简介 5.2SQL的基本语法 5.3数据查询语言 5.4数据操纵语言 5.5数据定义语言 5.6数据控制语言 5.7常用函数 5.8 事务处理 2、教学重点:数据查询语言、数据操纵语言、数据定义语言、数据控 制语言 3、教学难点:SQL的基本语法 第六章P L/SQL编程(8学时)(课本第6,7章) 1、教学内容: 6.1PL/SQL基础 (1)变量及声明 (2)数据类型 (3)表达式 (4)PL/SQL程序块结构 6.2PL/SQL控制结构

北语 18春《Oracle数据库开发》

18春《Oracle数据库开发》作业_1 一、单选题( 每题4分, 共10道小题, 总分值40分) 1.在Oracle中,关于PL/SQL下列描述正确的是() A. PL/SQL代表Power Language/SQL B. PL/SQL不支持面向对象编程 C. PL/SQL块包括声明部分、可执行部分和异常处理部分 D. PL/SQL提供的四种内置数据类型是character,integer,float,boolean 答案:C 2.当需要删除表,且该表具有外键约束,需要删除表及其外键约束,可以使用如下()类型的SQL语句。 A. DROP TABLE table1 B. DROP TABLE tablel with foreign key C. DROP TABLE tablel1 CASCADE CONSTRAINTS D. DROP TABLE table1 all 答案:C 3.为了启动Oracle数据库实例,Oracle必须读取一个()文件,该文件保存了实例和数据库的配置参数列表。 A. 控制文件 B. 数据文件 C. 参数文件 D. 初始化文件 答案:C 4.()实现了JDBC ResultSet中的所有方法,但与ResultSet不同的是,OracleCachedRowSet 中的数据在Connection关闭后仍然有效。 A. OracleCachedRowSet B. OracleRowSet C. OracleSet D. CachedRowSet 答案:A 5.假设需要给某个客户表Customer的Customer_name列添加注释信息:客户姓名,可以使用如下()方式 A. COMMENT ON TABLE?CUSTOMER?IS?'客户姓名' B. COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME IS '客户姓名' C. COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME '客户姓名' D. COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME '客户姓名' 答案:B

ORACLE数据库基础测试题oracle数据库复习题

ORACLE数据库基础测试题 提示:本题为ORACLE数据库基础测试题,适合初学者对基础知识进行测试,以便查漏补缺。 1、 DDL指得就是:()。 A、数据定义语言 B、数据操作语言 C、数据查询语言 D、数据控制语言 正确答案:A解析: 2、 下列创建表语句正确得就是:(). A、create table emp(id number(4),); B、createtable emp(id number(4)); C、alter table emp(id number(4)) ; D、alter tableemp(id number(4),) ;

正确答案:B解析: 3、 下列Oracle函数中能够返回两个字符串连接后得结果得就是:()。 A、initcap B、instr C、trim D、concat 正确答案:D解析: 4、 下列SQL语句得查询结果就是:()。selectround(45、925,0),trunc(45、925)fromdual; A、4545 B、4645 C、4546 D、46 46 正确答案:B解析:

5、 关于函数nvl(d1,d2)得用法说法正确得就是:()。 A、表示如果d1为null则d2必须为null B、表示如果d1为null则忽略d2 C、表示如果d1不为null则用d2替代 D、表示如果d1为null则用d2替代 正确答案:D解析: 6、 显示emp表得所有行,所有列,下列SQL语句正确得就是:()。 A、select*fromemp; B、select all、*from emp; C、selectallfromemp; D、select/* from emp; 正确答案:A解析: 7、 查询职员得姓名及其直接领导,如果没有直接领导得职员,则显示为“NoManager",下列SQL语句正确得就是:()。

Oracle数据库知识总结

AD1. 执行一个SQL脚本文件 SQL>start file_name SQL>@ file_name 我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。 4. 将显示的内容输出到指定文件 SQL> SPOOL file_name 在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。 5. 关闭spool输出 SQL> SPOOL OFF 只有关闭spool输出,才会在输出文件中看到输出的内容。 7. COL命令: 主要格式化列的显示形式。 1). 改变缺省的列标题 COLUMN column_name HEADING column_heading For example: Sql>select * from dept; DEPTNO DNAME LOC ---------- ---------------------------- --------- 10 ACCOUNTING NEW YORK sql>col LOC heading location sql>select * from dept; DEPTNO DNAME location --------- ---------------------------- ----------- 10 ACCOUNTING NEW YORK 2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上: Sql>select * from emp Department name Salary ---------- ---------- ---------- 10 aaa 11 SQL> COLUMN ENAME HEADING ’Employee|Name’ Sql>select * from emp Employee Department name Salary ---------- ---------- ---------- 10 aaa 11 note: the col heading turn into two lines from one line. 3). 改变列的显示长度: FOR[MAT] format Sql>select empno,ename,job from emp; EMPNO ENAME JOB ---------- ---------- --------- 7369 SMITH CLERK

北语20秋《Oracle数据库开发》作业1【标准答案】

20秋《Oracle数据库开发》作业1 试卷总分:100 得分:100 一、单选题 (共 9 道试题,共 36 分) 1.Orcacle提供了(),用于支持采用向导方式创建数据库。 A.SQL*Plus B.Oracle Net C.Oracle Listner D.Oracle Database Configuration Assistant。 答案:D 2.可以自动执行操作的存储对象是() A.程序包。 B.函数。 C.过程。 D.触发器 答案:D 3.在Oracle中,约束可以在DML语句执行之后立即生效,也可以延迟到事务处理提交时才生效。()语句可以让用户在事务处理中设置延迟约束的强制模式 A.set constraint B.set transaction C.take constraint D.take constraint 答案:A 4.Oracle的分区表可以包括多个分区,每个分区都是一个独立的(),可以存放到不同的表空间中。 A.段。 B.盘区。 C.物化视图。 D.数据文件 答案:A 5.初始化参数()指定了实例启动时希望创建的共享服务器进程的数目 A.SHARED_SERVICES。 B.DISPATCHERS。 C.HOST。 https://www.wendangku.net/doc/22904054.html,_SERVICES 答案:A 6.假设需要格式化作者表AUTHOR查询的列信息,将AUTHOR_ID列名字格式化为“作者编号”,AUTHOR_ID列名字格式化为“作者名称”,AUTHOR_DESC列名字格式化为“作者简介”,可以使用如下()方式 A.FORMAT AUTHOR_ID HEADING ’作者编号’FORMAT AUTHOR_NAME HEADING ’作者名称’FORMAT

相关文档
相关文档 最新文档