SQL编码规范教材ppt课件_第1页
SQL编码规范教材ppt课件_第2页
SQL编码规范教材ppt课件_第3页
SQL编码规范教材ppt课件_第4页
SQL编码规范教材ppt课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训SITECHwww.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障11.1 概述1.2 范围www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训制定编码规范的最主要的目的是为了对产出代码的长期制定编码规范的最主要的目的是为了对产出代码的长期维护。通常负责维护代码的人大多都不是开发者本人,如果维护。通常负责维

2、护代码的人大多都不是开发者本人,如果有一个统一的代码格式以及说明就可以减少混淆提高理解速有一个统一的代码格式以及说明就可以减少混淆提高理解速度。因而,下列的编码规范是基于良好的编码习惯和可读性度。因而,下列的编码规范是基于良好的编码习惯和可读性的原则来制定的。的原则来制定的。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训本规范定义了所有代码编写者在编写SQL程序时应遵守的一些规则和习惯。本规范采用以下术语描述:规则:编程时强制必须遵守的原则。 建议:编程时必须加以考虑的原则。 说明【 】:对此规则或建议进行必要的解释。 例如:对此规则或

3、建议从正、反两个方面给出例子。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障22.1一般规则2.2 E-SQL排版规则www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.1 独立单元书写规则:独立单元书写规则:整个文件,以过程、函数或包为相对独立的单元。在每个单位中,采用以下统一整个文件,以过程、函数或包为相对独立的单元。在每个单位中,采用以下统一格式。格式。例如:例如:CREATE or

4、 REPLACE ASBEGINEXCEPTIONEND;即:即:CREATE、AS、BEGIN、EXCEPTION和和END,在第,在第1列。后面的内容,间列。后面的内容,间隔隔1个个TAB书写。书写。除非内部处理,否则一律带上除非内部处理,否则一律带上EXCEPTION。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.2 块关键字对齐原则:块关键字对齐原则:任何块的关键字,首字母在列上对齐。任何块的关键字,首字母在列上对齐。即:一个程序块内部,标识程序块的关键字开始语句即:一个程序块内部,标识程序块的关键字开始语句(IF、

5、DO、FOR和和BEGIN)、中间语句中间语句(ELSIF、EXCEPTION、ELSE)和结束语句和结束语句(END IF、END LOOP、END),在列位置对齐。在列位置对齐。规则规则2.3 块内缩进原则块内缩进原则即:一个块下属的内容,从下一行开始,从这个块的标识首字符右移一个即:一个块下属的内容,从下一行开始,从这个块的标识首字符右移一个tab键,键,从右移一个从右移一个tab键开始。键开始。规则规则2.4 TAB/空格一致原则空格一致原则即:一个源文件中,在内容缩进上,要么采用即:一个源文件中,在内容缩进上,要么采用tab方式,要么采用方式,要么采用4个空格方式。个空格方式。不能二

6、者并存。不能二者并存。强烈建议要求使用强烈建议要求使用TAB对齐。对齐。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.5 程序块间隔行规则:程序块间隔行规则:SQL程序块之间,采用程序块之间,采用1行空行分隔。适当时候,可以存在行空行分隔。适当时候,可以存在2行空行,不要超过行空行,不要超过2行行(注释行不在此约定范围内注释行不在此约定范围内)。规则规则2.6 IF语句:语句:IF语句是条件判断语句,只有一个条件的时候,可以不用圆括号。两个以上条件语句是条件判断语句,只有一个条件的时候,可以不用圆括号。两个以上条件的时候,要

7、求用圆括号的时候,要求用圆括号(),使得逻辑处理明晰。,使得逻辑处理明晰。IF/ELSIF/ELSE/END IF关键字,每个都独立占一行。且每行的开始列位置都相关键字,每个都独立占一行。且每行的开始列位置都相同。同。特别注意,结束语句特别注意,结束语句END IF后面,有分号。后面,有分号。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.7 循环语句:循环语句:循环开始语句循环开始语句(FOR、WHILE)跟跟LOOP语句分行。语句分行。END LOOP语句,跟语句,跟LOOP在同一列位置。在同一列位置。例如:例如:FOR

8、v_Index IN 1.20LOOPEND LOOP;www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.7 循环语句:循环语句:一行最长不能超过一行最长不能超过80字符。当超过时,以语意为单位,进行断行,且断行后的内字符。当超过时,以语意为单位,进行断行,且断行后的内容,缩进书写。容,缩进书写。例如:例如:- 创建汇总基础表创建汇总基础表 Create_BaseDat- p_BaseSQL in varchar - SQL 语句语句- p_sResultTBL in varchar- 结果输出数据表结果输出数据表- p_sIn

9、foStr in varchar- 提示信息提示信息- 返回值:返回值:0记录数记录数Function CReate_BaseData(p_BaseSQL in varchar, p_sResultTBL in varchar, p_sInfoStr in varchar2) RETURN INT;此外,此外,SELECT/FROM/WHERE/ORDER BY/GROUP BY等子句必须另起一行等子句必须另起一行写。写。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.9 空格:空格:SQL内算数运算符、逻辑运算符连接的两个元

10、素之间必须用空格分隔。内算数运算符、逻辑运算符连接的两个元素之间必须用空格分隔。逗号之后必须接一个空格。逗号之后必须接一个空格。关键字、保留字和左括号之间必须有一个空格。关键字、保留字和左括号之间必须有一个空格。规则规则2.10 大小写规则大小写规则SQL 语句中出现的系统保留字、内置函数名、语句中出现的系统保留字、内置函数名、SQL保留字、绑定变量等都应大保留字、绑定变量等都应大写。写。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障22.1一般规则2

11、.2 E-SQL排版规则www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.11在在EXEC SQL语句后加一个语句后加一个TAB键,然后再写键,然后再写SQL语句。语句。规则规则2.12SQL语句的关键字语句的关键字SELECT、FROM、WHERE、AND等,必须尾部对齐。等,必须尾部对齐。规则规则2.13语句的结束符语句的结束符“;”,放在语句的结束位置,不单独起一行。,放在语句的结束位置,不单独起一行。规则规则2.14SQL语句中不能有注释,如语句中不能有注释,如“/*/”、“-”等,注释写在等,注释写在SQL语句的外面。

12、语句的外面。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则2.15SQL语句中的对齐方式用空格对齐,语句中的对齐方式用空格对齐,SQL语句到语句到“EXEC SQL之间用之间用TAB对对齐。齐。例如:例如:EXEC SQLSELECT COL1, COL2 FROM tab1 WHERE col1 = ? AND col2 = ?;规则规则2.16每个嵌入的每个嵌入的EXEC SQL语句,必须单独一行开始。语句,必须单独一行开始。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列

13、培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障33.1注释规则www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则3.1 对象注释要求对象注释要求创建每一数据库对象时都要加上创建每一数据库对象时都要加上COMMENT ON注释,以说明该对象的功能和用注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上途;建表时,对某些数据列也要加上COMMENT ON注释,以说明该列和注释,以说明该列和/或列取值或列取值的含义。的含义。例如:例如:comment on table RasInfo.T

14、D_UserInfo is 普通地区用户信息表,用于记录除成都外的其他地区的用户信息普通地区用户信息表,用于记录除成都外的其他地区的用户信息,按地区分区按地区分区;comment on column RasInfo.TD_UserInfo.UserCode is 用户编码用户编码,主键主键;www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则3.2 文件注释文件注释在每个在每个SQL脚本文件的开头,要用块注释,进行文件功能说明,文件编写人、联脚本文件的开头,要用块注释,进行文件功能说明,文件编写人、联系方式和文件创建时间说明等。系方式

15、和文件创建时间说明等。由于由于PL/SQL语句的特殊性,每行注释前以语句的特殊性,每行注释前以-为标志。为标志。例如:例如:- 收入保障系统收入保障系统 后台数据库脚本后台数据库脚本- 特殊号码汇总计算程序特殊号码汇总计算程序 dsras_pkgSpecal_CalcSum.SQL- 文本责任人:文本责任人:xxxx(xxxxsi-tech )- 2019.02.28 开始创建开始创建-www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则3.3 过程与函数的注释过程与函数的注释在每个过程或函数的开头,使用块注释,进行函数功能说明,入口

16、出口参数和返在每个过程或函数的开头,使用块注释,进行函数功能说明,入口出口参数和返回值说明。回值说明。例如:例如:- 得到集团用户外部编码。得到集团用户外部编码。- author xxxx- version %I%, %G%- since 1.00- inparam regionCode 地市代码地市代码- inparam smCode 业务代码业务代码- outparam grpUserNo 集团用户编码集团用户编码- return 返回返回0表示正确,否则出错!表示正确,否则出错!-www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则

17、规则3.4 变量注释变量注释对对SQL代码中的局部变量,重要的,要进行注释。尤其对代码中的局部变量,重要的,要进行注释。尤其对Package和和OBJECT中的内部全局变量,特别要进行注解。中的内部全局变量,特别要进行注解。关于变量的注释,采用行尾注释。关于变量的注释,采用行尾注释。例如:例如:TYPE RefCursor IS REF CURSOR; - - 定义参考游标类型定义参考游标类型- 最大欠费用户指标所在地区描述最大欠费用户指标所在地区描述f_AreaName VarChar(20);对常量及变量注释时,应注释被保存值的含义,包括合法取值的范围。对常量及变量注释时,应注释被保存值的

18、含义,包括合法取值的范围。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则3.5 参数注释参数注释对函数或过程的每个参数进行说明。对函数或过程的每个参数进行说明。如果取值范围确定,也一并说明。如果取值范围确定,也一并说明。取值有特定含义的变量如取值有特定含义的变量如boolean类型变量),给出每个值的含义。类型变量),给出每个值的含义。规则规则3.6 功能性注释功能性注释对较为复杂的对较为复杂的 SQL 语句应注释,并说明算法和功能。语句应注释,并说明算法和功能。应对不易理解的分支条件表达式加注释。应对不易理解的分支条件表达式加

19、注释。对重要的计算应说明其功能。对重要的计算应说明其功能。过长的函数实现,应将其语句按实现的功能分段加以概括性说明。过长的函数实现,应将其语句按实现的功能分段加以概括性说明。规则规则3.7 单行注释单行注释SQL程序中,尽量采用单行注释:程序中,尽量采用单行注释:-。这样,有利于程序调试时,通过块注。这样,有利于程序调试时,通过块注释方式,实现大段代码注释。释方式,实现大段代码注释。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.

20、2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议4.1 命名长度和结构命名长度和结构对象名不超过对象名不超过30个字符,不低于个字符,不低于6个字符,建议在个字符,建议在825个左右。个左右。由由35部分构成,每部分为有一定含义的英文缩写或者数字。每部分建议为部分构成,每部分为有一定含义的英文缩写或者数字。每部分建议为34个字符。个字符。英文缩写参见英文缩写参见“常见缩写字典常见缩写字典”。规则规则4.2 不得出现省市、项目简称不得出现省市、项目简称不允许出

21、现某省某地市或某项目的简称,例如不允许出现某省某地市或某项目的简称,例如sc_CustInfo中的中的sc是不许可的。是不许可的。规则规则4.3 年月日等数字年月日等数字年月日数字符号,一般应在数据表的尾部。不允许将年月日及其它数字放在对象年月日数字符号,一般应在数据表的尾部。不允许将年月日及其它数字放在对象名的中间。名的中间。例如,例如,Cust201903Info不许可,不许可,CustInfo201903则许可。则许可。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.4 区分非正式表区分非正式表存在于生产环境的非正式表,

22、如备份表,必须以原表名加前缀存在于生产环境的非正式表,如备份表,必须以原表名加前缀bakyymmdd_,以便于识别和及时清理。,以便于识别和及时清理。因而,正式生产表中,最好不要出现因而,正式生产表中,最好不要出现BAK、BACK之类的字符串。之类的字符串。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.5 命名特例命名特例编号编号数据库对象数据库对象格式范例格式范例备注备注1全局临时表(golbal temporary table)gTmp_XxxYyyZzz全局临时表属于ORACLE的一种特殊的表类型,不是指临时创建的非正

23、式表2视图View_XxxYyyZzz3普通索引Idx_TabName_ColumnNameColumnName是该索引第一个字段的简写4主键索引Idx_TabName_Pk5同义词必须与原对象名一致若已存在相同的对象名,必须合理调整该冲突对象名或者放弃使用同义词6触发器Trg_XxxYyyZzz7存储过程Prc_XxxYyyZzz8程序包Pkg_ XxxYyyZzz9函数Func_XxxYyyZzz10序列Seq_XxxYyyZzz11数据链路Link_UserName_DbNameDBNAME是指远程数据库的名称,USERNAME是指该远程库的用户名12分区表中的分区名Part_Xxxww

24、w.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.6 程序块内变量命名程序块内变量命名全局变量,以全局变量,以g_开头进行命名;开头进行命名;包内公用变量,以包内公用变量,以f_开头命名;开头命名;过程局部变量,以过程局部变量,以v_开头命名;开头命

25、名;参数变量,以参数变量,以p_开头命名;开头命名;游标变量,以游标变量,以cur_开头命名。开头命名。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.7:E-SQL源文件命名源文件命名源文件命名规则,一般如下:源文件命名规则,一般如下:RXX

26、_XX.pc或者或者RXX_XX.cp我们以前的我们以前的E-SQL命令一般都用命令一般都用*.cp,而国际标准一般都用,而国际标准一般都用*.pc。特此约定,以前的程序目录沿用特此约定,以前的程序目录沿用*.cp,新的程序目录使用,新的程序目录使用 *.pc命名。命名。文件名以大写字母文件名以大写字母R开头,后面跟操作代码。操作代码的前两位放在最前面,后开头,后面跟操作代码。操作代码的前两位放在最前面,后面的两位按照顺序放在面的两位按照顺序放在“_的后面,如的后面,如R11_04060820。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列

27、培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障44.1 数据库对象4.2 PL/SQL程序块内变量4.3 E-SQL源文件4.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.8:业务操作类一):业务操作类一)中文名称中文名称英文名称英文名称英文缩写英文缩写读取getget设置setset查询queryqry变更changechg提交、确认confirmcfm冲正、回滚rollbackroll验证validatevali比较comparecmp创建createcrt选

28、择selectsel插入insertins修改updateupd删除deletedelwww.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.8:业务操作类二):业务操作类二)中文名称中文名称英文名称英文名称英文缩写英文缩写转移transfertran替换replacerpl计算calculatecalc统计statisticstat申请requestreq预约、预订bookbook订购orderord退订cancelcanc打开onon关闭offoff配置configcfg分配allocateallowww.si-26-Apr-22

29、神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.8:业务操作类三):业务操作类三)中文名称中文名称英文名称英文名称英文缩写英文缩写结算mediationmed费用feefee发布releaserls跟踪tracetrac清除clearclr稽核auditaud开户、入网openopen业务变更changechg查询queryqry过户Change customerchgCust缴费paymentpay托收contractconwww.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.9:业务名词类一)

30、:业务名词类一)中文名称中文名称英文名称英文名称英文缩写英文缩写代码codecode类型typetype标识identifierid号码No.no序号seriationser名称namename消息messagemsg信息informationinfo历史historyhis日志loglog密码passwordpsw状态statussta日期datedatewww.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.9:业务名词类二):业务名词类二)中文名称中文名称英文名称英文名称英文缩写英文缩写时间timetime科目itemitem关

31、系relationrlt组织、机构organizationorg角色rolerole地址addressaddr担保assurerass版本versionver级别levellev电话phoneph合同contractcon发票invoiceinv接口Interfaceintfwww.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则4.9:业务名词类三):业务名词类三)中文名称中文名称英文名称英文名称英文缩写英文缩写操作oprationop功能functionfunc客户customercust集团groupgrp用户subscribers

32、ub帐户accountacc产品productprd服务servicesvc价格pricepri资源resourceres权限powerpowwww.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障55.1 PL/SQL程序块5.2 E-SQL程序5.3可读性要求5.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则5.1 简单函数或过程:简单函数或过程:单一功能函数或过程单一功能函

33、数或过程(以含注释在内,不超过以含注释在内,不超过100行就能解决问题为标准行就能解决问题为标准),约定采,约定采用独立过程或函数来实现。用独立过程或函数来实现。例如:例如:-是否是一个有效的数值是否是一个有效的数值- 参数:参数:- p_NumStr in varchar2 - 字符型数字串字符型数字串- 返回值:返回值:- 如果是数值,返回如果是数值,返回true;否则返回;否则返回false-CREATE OR REPLACE Function RasInfo.IsNumber(p_NumStr in varchar2) return booleanASv_Num Number;BEGI

34、NIF p_NumStr IS NULL THENreturn False;END IF;v_Num := To_Number(p_NumStr);Return True;EXCEPTIONWHEN OTHERS THENRETURN False;END;www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则5.2 不允许使用内嵌函数或过程:不允许使用内嵌函数或过程:尽管尽管ORCALE支持内嵌,但是不允许使用内嵌函数或过程。支持内嵌,但是不允许使用内嵌函数或过程。规则规则5.3 复杂函数或过程:复杂函数或过程:功能比较复杂的函数,不建

35、议使用独立函数或过程的实现。必须使用功能比较复杂的函数,不建议使用独立函数或过程的实现。必须使用Package或或OBJECT技术来实现。技术来实现。按照功能相近或相似原则,进行按照功能相近或相似原则,进行package或或object的组织。的组织。复杂的业务逻辑,采用复杂的业务逻辑,采用OBJECT技术来实现。公用的基础功能,采用技术来实现。公用的基础功能,采用package技技术实现。术实现。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障55.1

36、 PL/SQL程序块5.2 E-SQL程序5.3可读性要求5.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则5.4:SQL语句出错判断,使用语句出错判断,使用NOTFOUND、SQLOK等宏判断等宏判断SQL语句是否正确执行。语句是否正确执行。规则规则5.5:E-SQL使用自己的出错控制,不使用使用自己的出错控制,不使用E-SQL提供的统一出错控制,提供的统一出错控制,E-SQL的出错的出错一般设置为无效。一般设置为无效。EXEC SQL WHENEVER SQLERROR CONTINUE;EXEC SQL

37、WHENEVER SQLWARNING CONTINUE;EXEC SQL WHENEVER NOT FOUND CONTINUE;规则规则5.6属主变量都要放在属主变量都要放在SQL定义区统一定义:定义区统一定义:EXEC SQL BEGIN DECLARE SECTION;char sSql1024;EXEC SQL END DECLARE SECTION;www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障55.1 PL/SQL程序块5.2 E-SQL

38、程序5.3可读性要求5.4常用英文缩写字典www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则5.7 不允许使用不允许使用SELECT * :使用使用SELECT语句时,不允许使用语句时,不允许使用SELECT *,要使用明确的列名。目的是防止,要使用明确的列名。目的是防止数据字段增加后的影响。数据字段增加后的影响。规则规则5.8 INSERT必须指定插入的字段名:必须指定插入的字段名:使用使用INSERT时,必须指定插入的字段名,主要是考虑以后表结构的变动。时,必须指定插入的字段名,主要是考虑以后表结构的变动。规则规则5.9 函数及

39、表达式放在等号左边:函数及表达式放在等号左边:应将应将SQL语句中的数据库函数、计算表达式等放置在等号右边。不要在等号的左语句中的数据库函数、计算表达式等放置在等号右边。不要在等号的左边。边。规则规则5.10 不等于统一使用不等于统一使用:Oracle认为认为!=和和是等价的,都代表不等于的意义。为了统一,不等于一律是等价的,都代表不等于的意义。为了统一,不等于一律使用使用表示。表示。规则规则5.11 使用表的别名:使用表的别名:多表关联查询,必须使用表的别名。多表关联查询,必须使用表的别名。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培

40、训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障66.1性能相关的规则6.2性能相关的建议www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则6.1 添加索引提高效率:添加索引提高效率:对大表的操作,业务规范后,必须建立相应的索引,以提高查询效率。对大表的操作,业务规范后,必须建立相应的索引,以提高查询效率。规则规则6.2 WHERE子句中不应对索引列使用函数:子句中不应对索引列使用函数:不要在不要在WHERE子句中,不应该对索引列施以函数,否则该索引将无法使用。子句中,不应该对索引列施以函数,

41、否则该索引将无法使用。规则规则6.3 使用显式的类型转换:使用显式的类型转换:不要使用数据库的类型自动转换功能如数字自动转换为字符串),应使用显式不要使用数据库的类型自动转换功能如数字自动转换为字符串),应使用显式的类型转换。自动转换时往往导致该字段的索引无法使用。的类型转换。自动转换时往往导致该字段的索引无法使用。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训规则规则6.4 为共享为共享SQL语句,要使用绑定变量:语句,要使用绑定变量:执行相同操作的执行相同操作的SQL语句必须使用相同名字的绑定变量语句必须使用相同名字的绑定变量例如:

42、第一组的两个例如:第一组的两个SQL语句,绑定变量是相同的,而第二组中的两个语句绑定语句,绑定变量是相同的,而第二组中的两个语句绑定变量不同,即使赋于不同的绑定变量相同的值也不能使这两个变量不同,即使赋于不同的绑定变量相同的值也不能使这两个SQL语句相同,达不到语句相同,达不到共享共享SQL语句目的。语句目的。 a)第一组第一组 select pin , name from people where pin = :blk1.pin; select pin , name from people where pin = :blk1.pin; b)第二组第二组 select pin , name f

43、rom people where pin = :blk1.ot_ind; select pin , name from people where pin = :blk1.ov_ind;www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训概述排版规则注释规则命名规范SQL程序编码规则SQL性能规则与建议程序质量保证安全保障66.1性能相关的规则6.2性能相关的建议www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.5 减少子查询的使用:减少子查询的使用:子查询除了可读性差之外,还在

44、一定程度上影响了子查询除了可读性差之外,还在一定程度上影响了SQL运行效率运行效率. 应尽量减少子应尽量减少子查询的使用,采用其他效率更高、可读性更好的方式替代。查询的使用,采用其他效率更高、可读性更好的方式替代。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.6 使用使用DECODE函数来减少处理时间:函数来减少处理时间:使用使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表函数可以避免重复扫描相同记录或重复连接相同的表.例如:例如:SELECT COUNT(*),SUM(SAL) FROMEMP WHERE D

45、EPT_NO = 0020 AND ENAME LIKESMITH%; SELECT COUNT(*),SUM(SAL) FROMEMP WHERE DEPT_NO = 0030 AND ENAME LIKESMITH%; 可以用可以用DECODE函数高效地得到相同结果函数高效地得到相同结果 SELECT COUNT(DECODE(DEPT_NO,0020,X,NULL) D0020_COUNT, COUNT(DECODE(DEPT_NO,0030,X,NULL) D0030_COUNT, SUM(DECODE(DEPT_NO,0020,SAL,NULL) D0020_SAL, SUM(DEC

46、ODE(DEPT_NO,0030,SAL,NULL) D0030_SAL FROM EMP WHERE ENAME LIKE SMITH%; 类似的类似的,DECODE函数也可以运用于函数也可以运用于GROUP BY 和和ORDER BY子句中子句中www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.7 用用UNION替换替换OR (适用于索引列适用于索引列) :通常情况下通常情况下, 用用UNION替换替换WHERE子句中的子句中的OR将会起到较好的效果将会起到较好的效果. 对索引列对索引列使用使用OR将造成全表扫描将造成全表扫

47、描. 注意注意, 以上规则只针对多个索引列有效以上规则只针对多个索引列有效. 如果有如果有column没有没有被索引被索引, 查询效率可能会因为你没有选择查询效率可能会因为你没有选择OR而降低而降低. 在下面的例子中在下面的例子中, LOC_ID 和和REGION上都建有索引上都建有索引. 高效:高效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 UNION SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE REGION = “MELBOURNE”

48、低效:低效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE” 注意注意: WHERE KEY1 = 10 (返回最少记录返回最少记录) OR KEY2 = 20 (返回最多记录返回最多记录) ORACLE 内部将以上转换为内部将以上转换为 WHERE KEY1 = 10 AND (NOT KEY1 = 10) AND KEY2 = 20)www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.8 如何删除

49、重复记录:如何删除重复记录:高效的删除重复记录方法高效的删除重复记录方法 (因为使用了因为使用了ROWID)DELETE FROM EMP E WHERE E.ROWID (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);建议建议6.9 用用TRUNCATE替代替代DELETE删除全表:删除全表:当删除表中的所有记录时当删除表中的所有记录时,如果不需要恢复,建议使用如果不需要恢复,建议使用TRUNCATE而不是而不是DELETE ALL,既不占用回滚段,也能加快速度。,既不占用回滚段,也能加快速度。建议建议6.10 特大事务多

50、使用特大事务多使用COMMIT:在程序中尽量避免特大事务,多使用在程序中尽量避免特大事务,多使用COMMIT, 这样程序的性能得到提高这样程序的性能得到提高,也会因也会因为为COMMIT所释放的资源而减少。所释放的资源而减少。当然要注意,当然要注意,COMMIT次数也不能太频繁,频繁同样会增加数据库负担。次数也不能太频繁,频繁同样会增加数据库负担。www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.11 用用Where子句替换子句替换HAVING子句:子句:避免使用避免使用HAVING子句子句, HAVING 只会在检索出所有记录

51、之后才对结果集进行过只会在检索出所有记录之后才对结果集进行过滤滤. 这个处理需要排序这个处理需要排序,总计等操作总计等操作. 如果能通过如果能通过WHERE子句限制记录的数目子句限制记录的数目,那就能那就能减少这方面的开销减少这方面的开销.例如:例如:低效:低效:SELECT REGION,AVG(LOG_SIZE) FROM LOCATION GROUP BY REGION HAVING REGION != SYDNEY AND REGION != PERTH 高效:高效:SELECT REGION,AVG(LOG_SIZE) FROM LOCATION WHERE REGION != SY

52、DNEY AND REGION != PERTH GROUP BY REGION www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.12 用用EXISTS替代替代IN:在许多基于基础表的查询中在许多基于基础表的查询中,为了满足一个条件为了满足一个条件,往往需要对另一个表进行联接往往需要对另一个表进行联接.在在这种情况下这种情况下, 使用使用EXISTS(或或NOT EXISTS)通常将提高查询的效率通常将提高查询的效率. 例如:例如:低效:低效:SELECT * FROM EMP (基础表基础表) WHERE EMPNO 0 A

53、ND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = MELB) 高效高效: SELECT * FROM EMP (基础表基础表) WHERE EMPNO 0 AND EXISTS (SELECT X FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = MELB) www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.13 用用NOT EXISTS替代替代NOT IN:无论在哪种情况下无论在哪种情况下,NOT IN都是最低效的都是最低效的

54、 (因为它对子查询中的表执行了一个全表因为它对子查询中的表执行了一个全表遍历遍历).可以把它改写成外连接可以把它改写成外连接(Outer Joins)或或NOT EXISTS. 例如:例如:SELECT FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT=A); (方法一方法一: 高效高效) SELECT . FROM EMP A,DEPT B WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = A (方法二方法二:

55、最高效最高效) SELECT . FROM EMP E WHERE NOT EXISTS (SELECT X FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = A);www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.14 用表连接替换用表连接替换EXISTS :通常来说通常来说 , 采用表连接的方式比采用表连接的方式比EXISTS更有效率。更有效率。 SELECT ENAME FROM EMP E WHERE EXISTS (SELECT X FROM DEPT WHE

56、RE DEPT_NO = E.DEPT_NO AND DEPT_CAT = A); (更高效更高效) SELECT ENAME FROM DEPT D,EMP E WHERE E.DEPT_NO = D.DEPT_NO AND DEPT_CAT = A ; www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.15 用用EXISTS替换替换DISTINCT:当提交一个包含一对多表信息当提交一个包含一对多表信息(比如部门表和雇员表比如部门表和雇员表)的查询时的查询时,避免在避免在SELECT子子句中使用句中使用DISTINCT。一般可

57、以考虑用。一般可以考虑用EXIST替换。替换。例如:例如:低效:低效: SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D,EMP E WHERE D.DEPT_NO = E.DEPT_NO 高效:高效: SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT X FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO); www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.17 避免在索引列上使用计算:避免

58、在索引列上使用计算:WHERE子句中,如果索引列参与计算,优化器将不使用索引而使用全表扫描。子句中,如果索引列参与计算,优化器将不使用索引而使用全表扫描。例如:例如:低效:低效: SELECT FROM DEPT WHERE SAL * 12 25000; 高效高效: SELECT FROM DEPT WHERE SAL 25000/12;www.si-26-Apr-22神州数码思特奇公司基础工程师系列培训神州数码思特奇公司基础工程师系列培训建议建议6.18 避免在索引列上使用避免在索引列上使用NOT :避免在索引列上使用避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的影响会产生在和在索引列上使用函数相同的影响. 当当ORACLE遇到遇到NOT,会停止使用索引转而执行全表扫描。会停止使用索引转而执行全表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论