版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 项目编号:×××xxxOracle数据库开发规范Oracle DB Development Standardization<Language:Version><部门名称>*年*月*日文档信息:文档名称:文档编号:文档版本日期:起草人:起草日期:复审人:复审日期:版本历史:版本日期作者更改参考说明审批信息:签字/日期审核审批目录1概述41.1编写目的41.2文档约定41.3预期的读者和阅读建议41.4参考文献52数据库对象命名62.1命名总体原则62.2表名62.3视图62.4同义词62.5序列72.6索引72.7存储过程72.8
2、存储函数82.9存储程序包82.10触发器82.11字段82.12其他93设计规范93.1范围93.2表空间93.3字符集103.4主外键约束103.5分区表103.6RAC下的序列设计103.7字段103.8表结构设计113.9索引设计113.10临时表114SQL编写规范124.1书写规范124.2SQL语句的索引使用134.3SQL语句降低系统负荷155PL/SQL编程规范185.1书写规范185.2常用数据库操作语句编码规范195.3常用过程控制结构205.4Condition215.5Cursor225.6变量定义与赋值225.7过程与函数调用235.8例外处理 (Exception
3、)235.9例外处理的错误消息245.10注释 (Comment)255.11应用调试控制275.12并发控制275.13代码测试、维护291 概述1.1 编写目的为规范软件开发人员的Oracle数据库开发提供参考依据和统一标准。1.2 文档约定说明本文档中所用到的专用术语定义或解释,缩略词定义。1.3 预期的读者和阅读建议本文档适用于所有开发员。1.4 参考文献 列出有关的参考文件,如: a属于本项目的其他已发表文件; b本文件中各处引用的文档资料。 列出这些文件的标题、作者,说明能够得到这些文件资料的来源。2 数据库对象命名2.1 命名总体原则本规范所涉及数据库对象主要是指表、视图、同义词
4、、索引、序列、存储过程、函数、触发器等;命名应使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割;避免使用Oracle的保留字或关键字,如LEVEL和TYPE;各表之间相关列名尽量同名;除数据库模式对象名称长度为18个字符,其余对象名称均要求不超过30个字符;命名只能使用大写英文字母,数字和下划线,且以英文字母开头。2.2 表名规则:XXX_MMM_DDDD说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为表的简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音。示例:PO_HE
5、ADERS_ALL2.3 视图规则:XXX_MMM_DDDD_V说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为视图简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音;V表示视图,如有多个功能类似的视图,名称以V,V1,V2Vn区分。示例:PO_HEADER_RELEASE_V2.4 同义词规则:与引用的原对象同名示例:PO_HEADERS_ALL2.5 序列规则:XXX_MMM_DDDD_S说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可
6、以没有);DDDD为序列简称含义,使用英文单词或词组构成,可包括下划线,但不得使用汉语拼音;S表示序列。示例:PO_HEADERS_S2.6 索引规则:XXX_MMM_DDDD_Tn说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为索引简称含义,要求同表名,如总长度超过限制,可适当缩写;T有三种值:U表示唯一性索引,N表示非唯一性索引,B表示位图索引;n表示序号,用数字构成。示例:PO_HEADERS_ALL_U12.7 存储过程规则:XXX_MMM_DDDD_P说明:XXX代表子系统或模块名称(2-3个字母构成);
7、MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为存储过程简称含义,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;P表示存储过程。示例:PO_HEADERS_P2.8 存储函数规则:XXX_MMM_DDDD_F说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为存储函数简称含义,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;F表示存储函数。示例:PO_HEADERS_F2.9 存储程序包规则:XXX_MMM_DDDD_PKG说明:XXX代表子系统或模块名称(2-3个字母构成)
8、;MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为存储程序包简称,使用英文单词或词组构成,可包括下划线,不得使用汉语拼音;PKG表示存储程序包。示例:PO_HEADERS_PKG2.10 触发器规则:XXX_MMM_DDDD_Tn说明:XXX代表子系统或模块名称(2-3个字母构成);MMM代表子模块名称(2-3个字母构成,根据实际情况可以没有);DDDD为触发器简称含义,要求同表名,如总长度超过限制,可适当缩写;T表示触发器;n表示序号,用数字构成。示例:PO_HEADERS_T12.11 字段一般性字段:使用英文单词、词组或其有意义的缩写表示,可包括下划线,不得使用
9、汉语拼音,多个类似含义的字段,可在最后加数字序号;特殊字段:(1)代表主键的字段:表名或缩写+“_ID”,如PO_HEADER_ID(2)代表外键的字段:要求与相关表对应字段相同(3)记录跟踪字段(代表记录创建人、创建时间、最后修改人、最后修改时间):字段名类型NULL?说明CREATED_BYNUMBERNOT NULL这些字段仅用于跟踪数据的变化,而不能用于其他用途。CREATION_DATEDATENOT NULLLAST_UPDATED_BYNUMBERNOT NULLLAST_UPDATE_DATEDATENOT NULL(4)扩展字段(预留未来使用): ATTRIBUTE+n,n代
10、表序号,如ATTRIBUTE1,类型统一为VARCHAR2(150);对应扩展属性分类字段,命名为ATTRIBUTE_CATEGORY,类型为VARCHAR2(30)。2.12 其他其他对象参照上述原则和对象命名。3 设计规范3.1 范围设计规范主要是对与开发关系密切的数据库整体设计部分进行说明,以便于DBA更有效的管理和维护数据库。主要包括表空间、字符集、主外键约束、分区表、字段类型等内容。3.2 表空间一致性:无论是基于商品化软件的开发,还是独立的客制化开发系统,对于客制化对象,每个子系统或模块都使用统一的一组表空间(数据表空间和索引表空间各一个,且数据表空间为默认表空间);独立性:数据和
11、索引独立存储,表空间由DBA统一管理和维护,任何新建表均应使用默认的数据表空间,新建索引均需使用指定的索引表空间;新建表和索引时,原则上不允许指定除表空间以外的任何参数,特殊情况必须指定有别于表空间的默认参数时,需经过单独评审。示例:CREATE TABLE TABLE_NAME (FIELD1) TABLESPACE XXX;例外情况:当使用分区表时,可根据情况建立独立的表空间。3.3 字符集应用系统数据库应使用UTF8字符集,应用程序开发本身也需要支持UTF8字符集录入和查询。注意事项:UTF8字符集默认排序规则非中文拼音,如有需要应在代码级或数据库会话级做特殊处理。3.4 主外键约束数据
12、库表对象原则上禁止使用主外键约束,主外键所承担的主要作用应通过其他方式实现,如主子表数据完整性由应用层实现,索引功能通过建立单独索引实现。3.5 分区表为了降低数据库的维护复杂度,非必要情况下,不使用分区表;或经常需要跨分区查询数据,此时也不应使用分区表;特殊应用场景确有必要时,可选择范围分区表、列表分区表、哈希分区表、组合分区表几种方式,并根据分区类型和分区依据,调整索引,使相关数据查询尽量在一个分区中完成。3.6 RAC下的序列设计当数据库部署架构为RAC时,原则上禁止使用序列生成依赖其大小排序的单据号码,如确有必要,则序列必须设计为禁用缓存模式。3.7 字段数值类型使用NUMBER,需要
13、存储整型数值时,可指定小数位精度为0;枚举类型优先使用数值型替代字符型,且需要备注说明枚举类型的各个不同取值的含义;ID结尾的字段为应为数值型,CODE结尾的字段可为字符型或数值型;用CHAR(1)表示布尔值的取大写:“Y”,“N”,或改为数值型,用0和1表示;原则上使用VARCHAR2代替CHAR类型,以节省存储空间,但对性能要求太别高的应用场景例外;日期时间型应使用DATE,禁止使用字符型;使用CLOB代替LONG,BLOB代替LONG RAW;一般性字段应有含义注释,对于可以有缺省值的字段,应设为非空类型,并给出缺省值。3.8 表结构设计原则上表结构设计应符合第三范式,减少冗余字段,但在
14、不影响数据一致性的情况下,为了提高性能或开发实现的方便性,可以适当增加冗余字段。创建表时,应添加相关注释,简要说明主要用途。表与表之间的关系应提供E-R图。3.9 索引设计对代表唯一记录的字段或字段组合应建立唯一索引,对于查询中需要作为查询条件的字段,可以考虑建立非唯一索引,对于作为查询条件的枚举型字段,可考虑建立位图索引。建立复合索引时,应根据条件字段的查询频率决定索引字段顺序。开发过程中新编写的SQL,应对照查询条件检查有无相关索引,除需要特别指定全表扫描的情况外,原则上应建立相关索引。3.10 临时表临时表指创建表时指定临时表参数的数据表,并非指表名中含有TEMP字符的表。尽量避免在临时
15、表上使用DISTINCT、ORDER BY、GROUP BY、HAVING、JOIN,以减轻临时表负担,同时应避免频繁创建和删除临时表,减少系统表资源的消耗。在新建临时表时,如果一次性插入数据量很大,应使用SELECT INTO代替CREATE TABLE,避免数据库LOG,提高速度;如果数据量不大,为了缓和系统表的资源,可先CREATE TABLE,然后INSERT。如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,以保证系统能够很好的使用到该临时表的索引。如果在程序中动态创建了临时表,最后务必将其显式删除,并优先TRUNCATE TABLE
16、,然后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条件中“=
17、”两边各保留一个空格,条件Column保持对齐。示例:语句名格式SELECTSELECT column1 ,column2 ,column3FROM table_nameWHERE column1 = v_condition1AND column2 = v_condition2GROUP BY column_nameORDER BY column_name;4.1.3 别名当一个SQL 语句中涉及到多个表时,应始终使用别名来限定字段名,避免含义模糊的引用;别名命名时,避免使用无意义的代号a、b 、c , 而应该有意义(如表mtl_system_items_b 对应别名为msi,po_heade
18、rs_all 别名对应为pha)。4.2 SQL语句的索引使用除特殊情况外,原则上SQL语句应使用索引,且一般要遵守以下规则。4.2.1 避免索引列上的函数如果函数中使用到索引列字段,则索引是不被利用的,可以通过改变SQL写法来回避。SUBSTR不使用SELECT e.ename FROM emp e WHERE SUBSTR(e.ename, 1, 1) = 'S'使用SELECT e.ename FROM emp e WHERE e.ename LIKE 'S%'以上假设emp表的ename建立了索引。TO_CHAR、TO_DATE不使用SELECT e.e
19、name FROM emp e WHERE TO_CHAR(e.hiredate,'YYYY/MM/DD') = '1981/11/17'使用SELECT e.ename FROM emp e WHERE e.hiredate = TO_DATE('1981/11/17','YYYY/MM/DD');以上假设emp表的hiredate建立了索引。NVL不使用SELECT e.ename FROM emp e WHERE nvl(m,0) < 1000;使用SELECT e.ename FROM emp e WHERE m I
20、S NULL OR m < 1000;以上假设emp表的comm建立了索引。TRUNC不使用SELECT e.ename FROM emp e WHERE TRUNC(e.hiredate) BETWEEN to_date('2005/01/01','YYYY/MM/DD') AND to_date('2005/01/31','YYYY/MM/DD');使用SELECT e.ename FROM emp e WHERE e.hiredate >= to_date('2005/01/01','YY
21、YY/MM/DD') AND e.hiredate < to_date('2005/01/31','YYYY/MM/DD')+1;以上假设emp表的hiredate建立了索引。4.2.2 避免索引列上的计算公式如果索引列上使用了计算公式,则索引不能使用,可以通过更改计算公式来避免。不使用SELECT e.ename FROM emp e WHERE e.sal*1.1 > 900;使用SELECT e.ename FROM emp e WHERE e.sal > 900/1.1;以上假设emp表的sal建立了索引。4.2.3 避免使用n
22、ot in,使用not exists代替使用not in时,可能导致从表索引无法使用,可以使用not exists来避免。不使用SELECT e.ename FROM emp e WHERE e.deptno NOT IN (SELECT d.deptno FROM dept d);使用SELECT e.ename FROM emp e WHERE e.deptno NOT EXISTS (SELECT 'x' FROM dept d WHERE d.deptno = e.deptno);4.2.4 LIKE的使用LIKE用于模糊检索,LIKE检索的样式有三种:前匹配(XX%)
23、、中间匹配(X%X)、后匹配(%XX)。对于前匹配可以使用索引,而使用中间匹配和后匹配,都不能使用索引。因此除非必要,否则应尽量避免使用中间匹配和后匹配。不使用SELECT e.ename FROM emp e WHERE e.ename LIKE '%B'使用SELECT e.ename FROM emp e WHERE e.ename LIKE 'B%'4.2.5 复合索引的使用要使用复合索引,where语句中必须包括复合索引中的所有列或前几个列。如果复合索引的第一个列不在where语句中则不能使用该复合索引。不使用SELECT e.ename FROM e
24、mp e WHERE e.job = 'MANAGER'使用SELECT e.ename FROM emp e WHERE e.deptno = 20 AND e.job = 'MANAGER'使用SELECT e.ename FROM emp e WHERE e.deptno = 20;以上假设emp表的deptno, job建立了索引。4.2.6 索引提示使用对于特别的应用场景可利用hint固化执行计划,以使用正确索引。4.3 SQL语句降低系统负荷4.3.1 编写可再利用性的SQL语句对已经运行过的SQL语句,Oracle会将它放在SQL缓冲池中,当有SQ
25、L需要运行时,Oracle会先从SQL缓冲池中查询是否该语句已经存在,如存在的话则直接执行,否则需要进行编译、解析的操作。因此编写可再利用的SQL语句可以提高系统性能。为了提高SQL语句的可再利用,必须注意以下两点:遵守SQL编写规范:原则上,对于不是完全一样的SQL,oracle不会去再利用。即使是大小写不同,多了1个空格,都被认为是不同的SQL语句。所以,要彻底的遵循SQL/PLSQL编程规范,来保证SQL语句的再利用性。利用变量绑定:当需要动态组合条件时,应避免直接将变量值组合到条件中去,而应该使用变量绑定,从而提高SQL语句的再利用性。4.3.2 使用表别名通过对表附加别名,SQL编译
26、时可以明确列的来源表,从而使得SQL的编译时间缩短,另外还可以增加SQL语句的可读性。4.3.3 ROWNUM的使用ROWNUM可以限制检索数据的数量,如果为了判断对象是否存在,使用ROWNUM=1是非常有效的。检索是否存在部门20的员工SELECT 'Y' FROM emp e WHERE e.deptno = 20 AND ROWNUM = 1;注意:由于ROWNUM是获得数据的顺序号,在有ORDER BY子句的情况下,ROWNUM列无法按分类有序递增。4.3.4 UNION和UNION ALL为了排除有UNION重复的data,系统自动进行分类处理。如果确定联合中不会出现
27、重复数据的话,必须设定UNION ALL来取消自动分类以提高检索速度。4.3.5 替代DISTINCT使用DISTINCT将引起内部排序处理,如有可能,应尽量使用EXISTS、NOT EXISTS或子查询来避免。使用DISTINCTSELECT DISTINCT d.deptno, d.dname FROM dept d, emp e WHERE d.deptno = e.deptno;使用EXISTSSELECT d.deptno, d.dname FROM dept d WHERE EXISTS (SELECT 'x' FROM emp e WHERE d.deptno =
28、 e.deptno);4.3.6 避免视图滥用如果查询只检索基表的几个字段,应避免直接使用视图,造成不必要的数据块检索。视图CREATE VIEW CRM_emp_v SELECT e.empno, e.ename, e.sal, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno=d.deptno;使用视图SELECT e.empno, e.ename FROM CRM_emp_v;使用基表SELECT e.empno, e.ename FROM emp;4.3.7 组合查询语句尽量将几个简单的SQL语句组合成一个SQL进行查询,可以减少数
29、据检索次数,提高检索效率,但会造成可读性较差。组合前SELECT e.sal FROM emp e WHERE e.ename = 'Jimmy'SELECT AVG(e.sal) FROM emp e WHERE e.deptno = 20;组合后SELECT e.sal, d.sal_avgFROM (SELECT e1.sal FROM emp e1 WHERE e1.ename = 'Jimmy') e (SELECT AVG(e2.sal) sal_avg FROM emp e2 WHERE e2.deptno = 20 ) d;4.3.8 WHERE
30、条件中不调用自定义函数或过程在WHERE条件中调用自定义函数或过程极易造成SQL性能严重降低,原则上应禁止使用,除非十分有必要且能百分百保证此条件不会成为查询驱动条件。4.3.9 避免强制类型转换SQL中的字符类型数据应该统一使用单引号,特别对纯数字的字符串,必须用单引号,以免导致内部转换而引起性能问题或索引失效。SQL中的变量、常量、表关联字段等与对应条件字段应保持相同类型或使用显式转换,避免数据库内部的强制转换。5 PL/SQL编程规范5.1 书写规范5.1.1 SQL书写SQL书写应符合SQL编写规范。5.1.2 大小写程序代码中要求保留字统一使用大写字符,其他字符除常量值外,一律使用小
31、写字符;程序注释中不做大小写要求。5.1.3 变量和参数程序内部变量名称要求以“v_”开头;输入参数名称要求以“p_”开头;输出参数或变量名称要求以“x_”开头;游标变量要求以“cur_”开头;游标记录变量要求以“rec_”开头;与表记录或字段关联的变量,变量类型统一使用%ROWTYPE或%TYPE,以便保持与相关表或字段一致。5.2 常用数据库操作语句编码规范语句名格式SELECTSELECT column1 ,column2 ,column3INTO variable1 ,variable2 ,varibale3FROM table_nameWHERE Condition1AND Cond
32、ition2GROUP BY column_nameORDER BY column_name;注:SELECT,INTO,WHERE等保留字左对齐并与其后参数保留空格。Column尽量与其对应Variable对齐。语句名格式UPDATEUPDATE table_nameSET column1 = value1 ,column2 = value2WHERE Condition;注:UPDATE,SET,WHERE等保留字左对齐并与其后参数保留空格。”=”两边各保留一个空格。Column保持对齐。语句名格式INSERTINSERT INTO table_name( column1 ,column2
33、 ,column3)VALUES ( value1 ,value2 ,value3);注:“(“紧跟table_name和VALUES,”)”独立一行。Column尽量与其对应Variable对齐。语句名格式DELETEDELETE FROM table_nameWHERE Condition;注:DELETE,WHERE等保留字左对齐并与其后参数保留空格。”=”两边各保留一个空格。Condition保持对齐。5.3 常用过程控制结构结构名格式IF-ELSEIF Condition THEN ELSIF Condition THEN ELSIF Condition THEN ELSE END
34、IF;注:模块中的缩进为4个空格,尽量不使用IF嵌套。结构名格式LOOPLOOP variable:= variable + 1; IF variable = 10 THEN EXIT; END IF;END LOOP;LOOP variable := variable + 1; EXIT WHEN variable = 10;END LOOP;注:模块中的缩进为4个空格,"="两边保留1个空格。结构名格式FOR LOOPFOR variable1 IN 12 . 150 LOOP variable1 := variable1 + (variable2 * 10); EXI
35、T WHEN variable1 > 12900;END LOOP;结构名格式WHILE LOOPWHILE variable < value LOOP SELECT variable1, variable2, variable3 INTO value1, value2, value3 FROM table_name WHERE variable4 = value4;END LOOP;5.4 Condition规范内容格式所有复合条件必须使用括号来区分,且AND与OR右对齐AND ConditionAAND (ConditonB)OR (ConditionC)对于空值的判断必须使用
36、IS NULL/ IS NOT NULLIF variable IS NULL THEN END IF;避免使用Hard Code,特别是常数,必须使用Hard Code的情况,要符合注释规范要求错误:ORG_ID = 90 正确:ORG_ID = FND_PROFILE.VALUE(ORG_ID)5.5 Cursor规范内容格式Cursor必须显式定义, 不能隐式定义隐式定义:OPEN cur_Meaning IS SELECT << cur_Meaning_Loop >>LOOP FETCH cur_Meaning INTO variable; EXIT WHEN
37、cur_Meaning%NOTFOUND;END LOOP cur_Meaning_Loop; 显示定义:DECLARE CURSOR cur_Meaning IS SELECT ;BEGIN END;Cursor可以显式使用, 也可以隐式使用显式使用:DECLARE CURSOR cur_Meaning IS SELECT ;BEGIN OPEN cur_Meaning; LOOP FETCH cur_Meaning INTO ; EXIT WHEN cur_Meaning%NOTFOUND; END LOOP; CLOSE Cur_Meaning; END;隐式使用:DECLARE CUR
38、SOR Cur_Meaning IS SELECT ;BEGIN FOR variable_rec IN Cur_Meaning LOOP END LOOP; END;5.6 变量定义与赋值规范内容格式变量用":="赋值,":="两边保留1个空格;v_meaning := value不等号用"<>"表示,"<>"两边保留1个空格;v_variable1 <> variable2用于查询数据库的变量类型与数据库中对应变量类型相同DECLARE v_meaning tablename
39、.column1%type;BEGIN SELECT column1 INTO v_meaning FROM tablename;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 例外
40、处理 (Exception)规范内容格式所有的SELECT INTO SQL都必须有Exception, 必须包括NO_DATA_FOUND, TOO_MANY_ROWS和OTHERS处理; 每一句SELECT语句必须有自己的Exception处理BEGIN SELECT INTO FROM WHERE condition;EXCEPTION WHEN no_data_found THEN WHEN too_many_rows THEN WHEN OTHERS THEN END;对Cursor的NO_DATA_FOUND例外,必须要有Exception Handle;在处理Exception时
41、,必须将所用到的Cursor关闭DECLARECURSOR Cur_Meaning IS SELECT ;BEGIN OPEN Cur_Meaning; FETCH Cur_Meaning INTO ;EXCEPTION WHEN NO_DATA_FOUND THEN IF Cur_Meaning %ISOPEN THEN CLOSE Cur_Meaning; END IF;END;5.9 例外处理的错误消息不允许在程序中写死错误消息或提示信息,而应分系统统一定义消息和调用接口;每个消息应有唯一代码,程序中仅需通过接口调用消息代码;消息内容应支持变量替代(&代表变量定义),以便灵活显示
42、消息内容。错误消息定义示例(未考虑多语言):消息名称模块简称消息内容XXX_NO_DATA_FOUNDXXXNo data found when find &FINDING ! Condition: &CONDITIONXXX_TOO_MANY_ROWSXXXMore than one record found when find &FINDING ! Condition: &CONDITIONXXX_OTHERS_ERRORXXXFetal Error when find &FINDING ! Error: &ERROR错误消息调用示例:规范内
43、容格式调用已定义的错误消息BEGIN SELECT unit_price INTO v_unit_price FROM oe_order_lines_all WHERE line_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('CONDIT
44、ION','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
45、(v_line_id); xxx_message.error; -抛出错误消息 WHEN OTHERS THEN 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)规范内容格式程序头部注释/*
46、= 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 £
47、;º* 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 * =*/在每一个变量声明的旁边添加注释DECLAREv_UOM_code table.column%TYPE; - 物料单位v_flag varchar2(1); - Y/N 用于控制是否继续IF语句必须加注释,给出注释来说明不同条件下不同的处理逻辑IF conditionA THEN ELSIF conditionB THEN - IF conditionA THEN EL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省通海三中2025届高考考前提分数学仿真卷含解析
- 福建省泉州三中2025届高考仿真模拟语文试卷含解析
- 2025届湖南省醴陵二中、醴陵四中高考数学二模试卷含解析
- 广西贺州市平桂管理区平桂高级中学2025届高三第二次模拟考试英语试卷含解析
- 2025届湖南省各地高三第二次诊断性检测数学试卷含解析
- 三门峡市重点中学2025届高考考前模拟数学试题含解析
- 2025届云南省昆明市师大附中高三第五次模拟考试语文试卷含解析
- 2025届湖北省荆州市名校高考数学三模试卷含解析
- 山西省运城市临猗县临晋中学2025届高考英语一模试卷含解析
- 2025届重庆市江津长寿巴县等七校高考英语考前最后一卷预测卷含解析
- 2024-2034年全球及中国核辐射行业市场发展现状及发展前景研究报告
- 微测网题库完整版行测
- 借款协议书格式模板示例
- 国家开放大学《管理英语4》边学边练Unit 5-8(答案全)
- 作家普希金课件
- 封山育林工程 投标方案(技术方案)
- 当代世界经济与政治 李景治 第八版 课件 第1、2章 当代世界政治、当代世界经济
- 2024年刑法知识考试题库附参考答案【满分必刷】
- 国开作业《公共关系学》实训项目1:公关三要素分析(六选一)参考552
- 肺功能进修总结汇报
- 《燃烧性能测试》课件-第二节 氧指数测试
评论
0/150
提交评论