SQL编码规范资料_第1页
SQL编码规范资料_第2页
SQL编码规范资料_第3页
SQL编码规范资料_第4页
SQL编码规范资料_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

&心思特奇

近ZSI-TECH

SQL编码规范

(V0.1)

北京神州数码思特奇信息技术股份有限公司

二。二一年一月

本文档及其所含信息为内部保密材料,由北京神州数码思特奇信息技术股份有限公司拥有

未经书面授权,不得对外泄露COPYRIGHT©2021保留所有权利

渗心思特奇

炖ZSI-TECH

文档信息

文档名称SQL编码规范

电子文档SQL编码规范.dcc/MicmsoftWORD2000

文件状态■草席5□正式发布口正在修改

编写人日期20I0-H-15

校对人日期年月日

审核人日期年月日

批准人日期年月日

变更记录

变更变更变更前变更后生效

变更原因更改人批准人备注

序号页码版本号版本号日期

I文档修改0.1

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第2页共27页

渗心思特奇

SQL编码规范ZSI-TECH

目录

1概述...............................................................7

1.1.范围........................................................7

2排版规则..........................................................26

1.2.一般规则....................................

规则2.1独立单元书写规则.......................

规则2.2块关键字对齐原财......................

规贝”2.3块内缩进原则...........................

规则2.4TAB/空格一致原则.......................

规则2.5程序块间隔行规则......................

规则2.6IF语句.................................

规则2.7循环语句...............................

规贝!/2.8换行规则,..............................

MJ2.9空格...................................

M2.10大小写规则...........................

1.3.E-SQL排版规则..............................

规则2.11在EXECSQL语句后加一个TAB键,然后再写SQL语句。

规贝U2.12SQL语句的关键字SELECT、FROM、WHERE,AND等,必须

尾部对齐。.......................................................26

规则2.13语句的结束符放在语句的结束位置,不单独起一行。26

规则2.14SQL语句中不能有注释,如等,注释写在SQL

语句的外面。.....................................................26

MJ2.15SQL语句中的对齐方式用空格对齐,SQL语句到“EXECSQL”

之间用TAB对齐。..................................

规则2.16每个嵌入的EXECSQL语句,必须单独一行开始。

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号效码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第3页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

规则5.2不允许使用内嵌函数或过程..............

规则5.3复杂函数或过程........................

5.2E-GQL程序....................................

规则5.4SQL语句出错判断,使用NOTFOUND、SQLOK券宏判断SQL

语句是否正确执行。................................

规则5.5E-SQL使用自己的出错控制,不使用E-SQL提供的统一出错控

制,E6QL的出错一般设置为无效。..................

规则5.6属主变量都要放在SQL定义区统一定义。…

5.3可读性要求.................................................15

规则5.7不允许使用SELECT*.................................15

规则5.8INSERT必须指定插入的字段名..........................15

规则5.9函数及表达式放在等号左边..............................15

规则5.10不等于统一使用”<>"..................................15

mj5.ll使用表的别名........................................15

6SQL性能规则与建议................................................16

6.1性能相关的规则.............................................16

规则6.1添加索弓I提高效率......................................16

规则6.2WHERE子句中不应对索引列使用函数....................16

规则6.3使用显式的类型转换.....................

规则6.4为共享SQL语句,要使用绑定变量.......................16

6.2性能相关的建议.............................................17

建议6.5减少子查询的使用......................................17

建议6.6使用DECODE区数来减少处理时间......................17

建议6.7用UNION替换OR(适用于索耳列).......................18

建议6.8加何蒯除重复记录.......................

建议6.9用TRUNCATE替代DELETE删除全表......

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号效码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第5页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

建议6.10特大事务多使用COMMIT...............

建议6.11用Where子句替换HAVING子句........................18

建议6.12用EXISTS替代IN....................................19

建议6.13用NOTEXISTS替代NOTIN...........................20

建议6.14用表连接替换EXISTS..................................20

建议6.15用EXISTS替换DISTINCT..............................21

建议6.17避免在索引列上使用计算..............................21

建议6.18避免在索用列上使用NOT..............................22

建议6.19用>=替代〉..........................................22

7程序质量保证................24

规则7.1运行日志....................................24

规则7.2错误日志....................................24

规则7.3工作日志....................................24

规则7.4异常检查.....................................24

8安全保障..........................................................25

8.1PL/SQL安全..................................................25

规贝U8.1DML/DDL语句需说明功能和要求.........................25

规贝U8.2游标使用结束后必须关闭......................25

8.2E-SQL安全....................................

规贝98.3PROC程序中禁止出现用户名和密码.......

8.3数据库操作...................................................25

规则8.4DML/DDL操作应显式写明对象属主.......................25

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第6页共27页

渗心思特奇

炖ZSI-TECH

SQL编码规范

1概述

制定编码规范的最主要的目的是为了对产出代码的长期维护。通常负责维护

代码的人大多都不是开发者本人,如果有一个统一的代码格式以及说明就可以减

少混淆提高理解速度。因此,下列的编码规范是基于良好的编码习惯和可读性的

原则来制定的。

1.1.范围

本规范定义了所有代码编写者在编写SQL程序时应遵守的一些规则和习惯。

本规范采用以下术语描述:

规则:编程时强制必须遵守的原则。

建必编程时必须加以考虑的原则。

说明【】:对此规则或建议进行必要的解释。

示例:对此规则或建议从正、反两个方面给出例子。

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第7页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

2命名规范

2.1数据库对象

命名对象范围:ORACLE数据库对象,包括表、索引、存储过程、触发器、

序列、视图、同义词、数据链路。

建议2.1命名长度和结构

对象名不超过30个字符,不低于6个字符,建议在8—25个左右。

由3—5部分构成,每部分为有•定含义的英文缩写或者数字。每部分建议

为3—4个字符。

英文缩写参见“常见缩写字典二

规则2.2不得出现省市、项目简称

不允许出现某省某地市或某项目的简称,例如sc.Custlnfo中的sc是不许可

的。

规则2.3年月日等数字

年月日数字符号,一般应在数据表的尾部。不允许将年月日及其它数字放在

对象名的中间。

例如,Cusl200703Info不许可,CusUnfo200703则许可。

规则2.4区分非正式表

存在于生产环境的非正式表,如备份表,必须以原表名加前缀

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号效码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第8页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

-bakyymmdd_\以便于识别和及时清理。

因此,正式生产表中,最好不要出现BAK、BACK之类的字符串。

规则2.5命名特例

编号数据库对象格式范例备注

1.全局临时表(golbalgTmp.XxxYyyZzz全局临时表属JORACLE的

temporarytable)一种特殊的表类型,不是指

‘临时'创建的非正式表

A,・视图View_XxxYyyZzz

3.普通索引!dx_TabName_ColumnNameColuinnName是该索引第一

个字段的简写

4.主键索引ldx_TabNamc_Pk

5.同义词必须与原对象名一致若已存在相同的对象名,必须

合理调整该冲突对象名或者

放弃使用同义词

6.触发器Trig_XxxYyyZzz

7.存储过程Proc_XxxYyyZzz

8.程序包Pkg_XxxYyyZzz

9.函数Func_XxxYyyZzz

10.序列Scq_XsxYyyZzz

11.数据链路Link_UserName_DbNameDBNAME是指远程数据库的

名称,USERNNME是指该远

程库的用户名

12.分区表中的分区名Part_Xxx

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第9页共27页

渗心思特奇

炖ZSI-TECH

SQL编码规范

2.2常用英文缩写字典

规则2.8:业务操作类

中文名称英文名称英文缩写

读取getget

设苴setset

查询queryqry

变更changechg

建交、确认confirmcfm

冲正、问滚rollbackroll

峻证validatevali

比较compareemp

创建createcr(

选择selectscl

插入insertins

修改updateupd

删除deletedel

转移transferIran

替换icplacc

计算calculatecalc

统计statisticstat

申请requestreq

预约、预订bookbook

订购orderord

退订cancelcanc

打开onon

关闭offoff

配置configcfg

分配allocateallo

结算mediationmed

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

(Tel);(010)58856600(Fax):(010)62969630

第10页共27页

渗心思特奇

炖ZSI-TECH

费用feefee

发布releaserls

跟踪tracetrac

清除clearclr

稽核auditaud

开户、入网openopen

业务变更changechg

查询queryqr)

过户ChangecustomerchgCust

缴费paymentpay

托收coniractcon

规则2.9:业务名词类

中文名称英文名称英文缩写

代码codecode

类型typetype

标识identifierid

号码No.no

序号seriationser

名称namename

消息messagemsg

信息infonnationinfo

历史historyhis

日志loglog

密码passwordpsw

状态statussla

日期datedate

E寸间timetime

科目itemitem

关系relationrlt

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第11■页共27页

渗心思特奇

炖ZSI-TECH

组织、机构organizationorg

角色rolerole

地址addressaddr

担保assurerass

版本versionver

级别levellev

电话phonePh

合同contractcon

心西

invoiceinv

接口interfaceintf

操作oprationop

功能functionfunc

客户customercust

集团groupg<P

用户subscribersub

帐户accountacc

产品productprd

服务serviceSVC

价格pricePri

资源resourceres

权限powerpow

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第12页共27页

渗心思特奇

SQL编码规范ZSI-TECH

3注释规则

规则3.1对象注释要求

创建每一数据库对象时都要加上COMMENTON注释,以说明该对象的功能

加用途;建表时,对某些数据列也要加上COMMENTON注释,以说明该列和/

或列取值的含义。

示例:

commentontabi©Raslnfo.TD_UserInfois

,普通地区用户信息表,用于记录除成都外的其他地区的用户信息,按地区分区,

commentoncolumnRaslnfo.TD_UserInfo.UserCodeis,用户编码,主键,

规则3.7单行注释

SQL程序中,尽量采用单行注释:’;。标准注释,但是只能注释一行

还有:

/*Formattedon2010/11/2210:47(FormatterPlusv4.8.6)*/

规则3.2文件注释

在每个SQL脚本文件的开头,要用块注释,进行文件功能说明,文件编写人、

联系方式和文件创建时间说明等。

由于PL/SQL语句的特殊性,每行注释前以',为标志。

示例:

-收入保障系统后台数据库脚本

--特殊号码汇总计算程序dsras_pkgSpecal_CalcSum.SQL

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号效码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第13页共27页

渗,思特奇

▲eh也神州敢利

比编码规范XgQMM,,SI2-T'E'JVCZHJJ

--文本责任人:丁凌风(dinglf@si・tech.com.cn)

—2007.02.28开始创漳

规则3.6功能性注释

对较为复杂的SQL语句应注择,并说明算法和功能。

应对不易理解的分支条件表达式加注释。

对重要的计算应说明其功能。

过长的函数实现,应将其语句按实现的功能分段加以概括性说明。

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600(Fax):(010)62969630

第14页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

4SQL程序编码规则

4.1可读性要求

规则5.1不允许使用SELECT*

使用SELECT语句时,不允许使用SELECT*,要使用明确的列名。目的是

防止数据字段增加后的影响。

规则5.2INSERT必须指定插入的字段名

使用INSERT时,必须指定插入的字段名,主要是考虑以后表结构的变动。

规则5.3函数及表达式放在等号左边

应将SQL语句中的数据库函数、计凫表达式等放置在等号右边。不要在等号

的左边。

规则5.4不等于统一使用

Oracle认为”!="和“<>”是等价的,都代表不等于的意义。为了统一,不等于

一律使用“<>"表示。

规则5.5使用表的别名

多表关联查询,必须使用表的别名。

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号效码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第15页共27页

渗心思特奇

SQL编码规范ZSI-TECH

5SQL性能规则与建议

5.1性能相关的规则

批注full:建立索引的目的是加快对我中记录的查找

规则5・1添加索引提高效率

或排序.数据K漆引好比是沐书曲面的目录,能加

快数据库的杳询速度.

对大表的操作,业务规范后,必须建立相应的索引,以提高查诜效率。例如这样,一个查询:select*fromtableIwhere

id=44.如果没有索引,必筑遍历整个表,直到ID等

于44的这一行被找到为止:有了索引之后(必须是在

规则5.2WHERE子句中不应对索引列使用函数

ID这•列上建立的索引卜直接t索引里面找44(也

就是在ID这一列找),就可以得知这一行的位置,也

不要在WHERE子句中,不应该对索引列施以函数,否则该索引将无法使用。就是找到了这行。可见,索引是用来定位的.为表

设置索引要付出代价的:•是增加了数据库的存储空

间,二是在插入和修改数据时要花费较多的时间(因

规则为共享语句,要使用绑定变量

5.3SQL为索引也要随之变动).

执行相同操作的SQL语句必须使用相同名字的绑定变量

例如:第一组的两个SQL语句,绑定变量是相同的,而第二组中的两个语句

绑定变量不同,即使赋于不同的绑定变量相同的值也不能使这两个SQL语句相同,

达不到共享SQL语句目的。

a)第一组

selectpin,namefrompeoplewherepin:blkl.pin;

selectpinnamefrompeoplewherepin:blkl.pin;

b)第二组

selectpinnamefrompeoplewherepin:blkl.ct_ind;

selectpin,namefrompeoplewherepin=:blkl.cv_ind;

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第16页共27页

渗心思特奇

炖ZSI-TECH

SQL编码规范

5.2性能相关的建议

建议5.1减少子查询的使用

子查询除了可读性差之外,还在一定程度上影响rSQL运行效率.应尽量减

少子查询的使用,采用其他效率更高、可读性更好的方式替代。

建议5.2使用DECODE函数来减少处理时间

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.

示例:

SELECTCOUNT(*),SUM(SAL)

FROMEMP

WHEREDEPT_NO=0020

ANDENAMELIKE'SMITH%*;

SELECTCOUNT(*),SUM(SAL)

FROMEMP

WHEREDEPT_NO=0030

ANDENAMELIKE'SMITH%';

可以用DECODE函数高效地得到相同结果

SELECTCOUNT(DECODE(DEPT_MO,0020,'X',NULL))D0020_COUNT,

COUNT(DECODE(DEPTNO,0030f'X'ZNULL))D0030COUNT,

SUM(DECODE(DEPT_NOZ0020,SAL,NULL))D0020_SAL,

SUM(DECODE(DEPT_NO,0030,SAL,NULL))D0030_SAL

FROMEMP

WHEREENAMELIKE'SMITH%';

类似的,DECODE函数也可以运用于GROUPBY和ORDERBY子句中

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号数码科技广场二层(100085)

电话(Tel):(010)58&56600传真(Fax):(010)62969630

第17页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

建议5.3用UNION替换OR(适用于索引列)

通常情况下,用UNION替换联ERE子句中的OR将会起到较好的效果.对索引

列使用OR将造成全表扫描.注意,以上规则只针对多个索引列有效.如果有

column没有被索引,查询效率可能会因为你没有选择OR而降低.

在下面的例子中,LOC」D和REGION上都建有索引.

・高效:

SELECTLOC_ID,LOC_DESC,REGION

FROMLOCATION

WHERELOC_ID=10

UNION

SELECTLOCID,LOCDESCfREGION

FROMLOCATION

WHEREREGION=''MELBOURNE"

•低效:

SELECTLOC_ID,LOC_DESC,REGION

FROMLOCATION

WHERELOC_ID=10ORREGION=''MELBOURNE”

注意:

WHEREKEY1-10(返叵1最少记录)

ORKEY2=20(返问员多记录)

ORACLE内部将以上转换为

WHEREKEY1=10AND

((NOTKEY1=10)ANDKEY2=20)

建议5.4用Where子句替换HAVING子句

避免使用HAVING子句,HAVING只会在检索出所有记录之后才对结果集进行

过滤.这个处理需要排序,总计等操作.如果能通过WHERE子句限制记录的数目,

那就能减少这方面的开销.

示例:

・低效:

神州数码思特奇信息技术股份有限公司地址:北京市海淀区上地九街9号效码科技广场二层(100085)

电话(Tel):(010)58856600传真(Fax):(010)62969630

第18页共27页

渗,思特奇

SQL编码规范£热配,SI-TECH

SELECTREGION,AVG(LOG_SI2E)

FROMLOCATION

GROUPBYREGION

HAVINGREGION!-'SYDNEY'

ANDREGION!='PERTH'

・高效:

SELECTREGION,AVG(LOG_SI2E)

FROMLOCATION

WHEREREGION!='SYDNEY,

ANDREGION!-'PERTH'

GROUPBYREGION

建议5.5用EXISTS替代IN

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联

接.在这种情况下,使用EXISTS(或NOTEXISTS)通常将提高查询的效率.

示例:

•低效:

SELECT*

FROMEMP(基珊表)

WHEREEMPNO>0

ANDDEPTNOIN(SELECTDEPTNO

FROMDEPT

WHERELOC=

温馨提示

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

最新文档

评论

0/150

提交评论