还剩7页未读,继续阅读
文本内容:
Oracle数据库编码规范1目的使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读、理解和继承2适用范本规范适用于公司范围内所有以ORACLE作为后台数据库的应用系统和项目开发工3规范
3.1书写规范丑陋的书写规范不仅可读性较差,而且给人以敬而远之的感觉;而良好的书写规范则给人以享受和艺术的体验
3.
1.1大小写风格规则
3.
1.
1.1所有数据库关键字和保留字命名使用大小写不做要求
3.
1.2缩进风格规则
3.L
2.1程序块严格采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个必须使用空格,不允许使用【Tab】键以免在用不同的编辑器阅读程序时,因【Tab】键所设置的空格数目不同而造成程序布局不整齐规贝!]
3.
1.
2.2当同一条语句需要占用多于一行时,每行的其他关键字与第一行的关键字进行右对齐IF flag=True THENSelect usernameInto vUserlnfoFrom userinfoWhere userid=id ENDIF;
3.
1.3空格及换行规则
3.
1.
3.1不允许把多个语句写在一行中,即一行只写一条语句且一行最长不能超过80字符;规则
3.L
3.2避免将复杂的SQL语句写到同一行,建议要在关键字和谓词间换行WHERE子句书写时,每个条件占一行规贝!I
3.
1.
3.3相对独立的程序块之间必须加空行BEGIN END独立成行
3.
1.4其它规贝!J
3.
1.
4.1确保变量和参数在类型和长度上与表数据列相匹配如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常
3.2命名规范对于命名规范来说,想要做到完全统一的确是不可能的任务命名规范更多的是个人层面的爱好,既使无法完全做到一致,但是我们仍然要尽量去遵守
3.
2.1字段命名规范在此仅提供几种常见的命名方法,如表3-2-1所示表3・2・1命名规范表UserName适合英语比较好,并且喜欢抑扬顿挫的人username适合英语比较好,且比较严谨的人userName适合做XX开发的人规贝!J
3.
2.L1不建议使用数据库关键字和保留字,原因是为了避免不必要的冲突和麻烦规则
3.
2.L2严禁使用带空格的名称来给字段命名322变量命名规贝II
3.
2.
2.1所有PL/SQL中的变量与对象命名规则相似,如表3-2-2-1所示表3・2・2・1变量命名规范表变量类型前缀范例输入变量遵询事实,不做要求输出变量遵询事实,不做要求输出输入变量遵询事实,不做要求参数cv_cv_userName普通变量lv_lv_userName全局变量gv_gv_userName常量大写PI游标cur_cur_userlnfo用户自定义类型type.type_userlnfo保存点save pointspt.spt_userlnfo变量代表列%type Sorganization.id%type规贝!I
3.
2.
2.2命名不允许使用中文或者特殊字符命名中若使用特殊约定或缩写,则要注释说明命名中多个词组合较长时,使用单词的缩写规贝!J
3.
2.23使用有意义、易于记忆、描述性强、简短及唯一的英文单词/拼音缩写说明个人命名风格,在符合所在项目组的命名规则的前提下,才可以使用规则
3.
2.
2.4对于变量命名,禁止取单个字符(如i、j),建议除了要有具体含义外,还要能表明变量类型等323其他对象命名用户自定义的数据库对象名包括表、视图、主外键、索引、触发器、函数、存储过程、序列、同义词、包和包体等规贝!J
3.
2.
3.1其他对象的命名也与字段的命名规则类似,风格保持一致即可规贝!J
3.
23.2除数据库名称长度为卜8个字符外,其余为1-30个字符命名只能使用英文字母、数字和下划线规贝(J
3.
2.33除表外,其他各种对象的命名最好用不同的前缀加以区别,如表3-2-3-3表3-2-3-3其他对象命名规范表对象名前缀范例表table业务表B_B_ORDER系统表S_S_SUSER附加表BR_BR_PRINTSPECPRICE视图view v_v_border序列sequence seq_seq_sdept触发器trigger tri_tri_border存储过程(procedure)sp_/p_sp_userlnfo/p_userlnfo函数functionfhjf_fn_userInfo/fLuserInfo物化视图materialized viewmv_mv_border包和包体packagepackage Osboracleservice busbody类和类体typetype bodytyp_typ.userlnfo主键primary keyPk一pk_border_fieldname夕卜键foreign keyfk_fk_border_fieldname唯一索引unique indexuk_uk_border_fieldname普通索引normal indexind_ind_border_fieldname位图索引bitmap indexbk_bk_border_fieldname同义词synonym依据所分配的表所属模块/模式数据库链接database link无特殊要求
3.3注释规范规则
3.
3.1一般情况下,源程序有效注释量必须在30%左右说明注释的原则是有助于对程序阅读理解,在该加的地方加,注释不宜太多也不能太少,注释语言需准确、易懂、简洁、精练规则
3.
3.2统一文件头的注释主要是对相关过程、函数进行功能性描述、修订记录,以及入参出参说明等对存储过程、函数的任何修改,都需要在注释后添加修改人、修改日期及修改原因等修订说明示例名称:GetVipCode_max描述获得会员中最大的会员代码由于会员代码加密,导致不能直接获得最大的会员代码,特编写此函数创建日期20XX-XX-XX创建人XXX变更描述在原基础上会员代码自动加1变更日期20XX-XX-XX变更人XXX functionGetVipCode_max(cv_orgID Sorganization.Id%type--组织机构代码)return Bcodebuilder.Code%type规则
3.
3.3所有变量定义需要加注释,说明该变量的用途和含义规则
3.
3.4注释内容要清晰、明了、含义准确,防止二义性在代码的功能、意图层次上进行注释,提供有用、额外信息尽量使用“-”进行注释规则
3.
3.5对程序分支必须书写注释规则
3.
3.6注释应与其描述的代码相似,对代码的注释应放在其上方或右方注释要与所描述的内容进行同样的缩排注释上面的代码应空行隔开规则
3.
3.7注释用中文书写
3.4语法规范良好的语法规范有助于书写出高效、完备的PL/SQL程序,同时有助于提高系统的容错性、健壮性、可追溯性规则
3.
4.1避免隐式的数据类型转换说明在书写代码时,必须确定表的结构和表中各个字段的数据类型,特别是在书写查询条件时的字段就更要注意这个是导致SQL性能不佳的原因之一示例如字段a为NUMBER类型,避免使用WHERE a=f l,这样会导致字段“a”上的索引失效规则
3.
4.2为了方便不同数据库平台的移植,尽量使用SQL99标准,而不要使用Oracle的“方言”例如,DECODE函数完全可以用CASE WHEN语句代替,而且可编程性更强(+)=右关联用RIGHT OUTERJOIN语句代替二(+)左关联用LEFT OUTERJOIN语句代替规则
3.
4.3对于非常复杂的SQL(特别是多层嵌套、带子句或相关的查询),应该先考虑是否是由设计不当引起的原则上遵循一句话只做一件事情关于处理的优先级•静态SQL>动态SQLo•绑定变量的SQL>动态SQLo•SQL>P1/SQL的过程,极端复杂的SQL除外•SQL>游标遍历•Oracle函数,自定义函数规则
3.
4.4原则上不要使用动态SQL,如果非得使用动态SQL,建议使用绑定变量规则
3.
4.5一定要及时关闭和释放游标规则
3.
4.6不要将空的变量值直接与比较运算符比较如果变量可能为空,应使用IS NULL或IS NOTNULL或NVL函数进行比较规则
3.
4.7尽可能地使用相关表字段的类型定义,$n%TYPE>%ROWTYPEo这样做当表结构发生变动的时候,能够最大程序地做到容错性和健壮性规则
3.
4.8在存储过程或函数中变量的声明应集中在IS和BEGIN关键字之间,不允许在代码中随意定义变量在定义变量时,完成相同功能模块的变量放在一起,与不同模块的变量应空行隔开,增加代码的可读性规则
3.
4.9存储过程、函数、触发器等应进行异常处理4性能建议•避免嵌套连接例如A=BANDB=CANDC=D•WHERE条件中尽量减少使用常量比较,改用主机变量,且尽量建立在有索引的列上•大量的排序操作影响系统性能,所以尽量减少ORDER BY和GROUP BY排序操作如必须使用排序操作,请遵循如下规则,排序尽量建立在有索引的列上L如结果集不需唯一,使用UNION ALL代替UNION•IN、OR子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引•查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面•尽量使用共享的SQL语句•尽量避免相同语句由于书写格式的不同,而导致多次语法分析,尽量使用绑定变量•尽量少用嵌套查询如必须,请用NOT EXIST代替NOT IN子句•用多表连接代替EXISTS子句•尽可能使用显式游标,避免使用隐式游标•使用UNION ALL、MINUSINTERSECT提高性能5数据库维护规范1)生产数据库由指定的系统管理员负责维护,其他人员没有权限进入如因工作需要进入生产数据库需经部门领导批准;2)生产数据库上不允许调试程序;3)数据库对象(包、视图、触发器、函数、存储过程等)变更前要留有备份;4)如必须在生产库上更改数据,更改前要对数据进行备份;5)应定期备份数据库对象(表结构、包、视图、触发器、函数、存储过程等);6)生产数据库的更新原则上不允许在业务繁忙时进行;7)当数据库有初始化数据时,应提供完备的数据初始化脚本;。