首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • SQL编码规范

    时间:2021-01-21 15:10:24 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:编码 规范 SQL

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

     未经书面授权,不得 对外 泄露

     COPYRIGHT © 2021 保留所有 权利

      SQL 编码规范

     (V V0 0. .1 1 )

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

     二〇二一年一月

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 2 页 共 27 页 文档信息

     文档名称

     SQL 编码规范

     电子文档

     SQL 编码规范.doc/Microsoft WORD 2000

     文件状态

     ■ 草

     稿

     □ 正式发布

     □ 正在修改

     编

     写

     人

      日

     期

     2010-11-15

      校

     对

     人

      日

     期

     年

      月

     日 审

     核

     人

      日

     期

     年

      月

     日 批

     准

     人

      日

     期

     年

      月

     日

      变更记录

     变更序号

     变更原因

     变更页码

     变更前版本号

     变更后版本号

     更改人

     批准人

     生效日期

     备

     注

     1 文档修改

      0.1

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 3 页 共 27 页 目

     录

     1

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

     1.1.

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

     2

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

     1.2.

     一般规则 ...................................................................... 错误! 未定义书签。

     规则 2.1 独立单元书写规则

     ............................................ 错误 ! 未定义书签。

     规则 2.2 块关键字对齐原则

     ............................................ 错误 ! 未定义书签。

     规则 2.3 块内缩进原则

     .................................................... 错误 ! 未定义书签。

     规则 2.4 TAB/空格一致原则

     ............................................ 错误 ! 未定义书签。

     规则 2.5 程序块间隔行规则

     ............................................ 错误 ! 未定义书签。

     规则 2.6 IF 语句

     ................................................................ 错误 ! 未定义书签。

     规则 2.7 循环语句

     ............................................................ 错误 ! 未定义书签。

     规则 2.8 换行规则

     ............................................................ 错误 ! 未定义书签。

     规则 2.9 空格

     .................................................................... 错误 ! 未定义书签。

     规则 2.10 大小写规则

     ..................................................... 错误 ! 未定义书签。

     1.3.

     E-SQL 排版规则 .......................................................... 错误! 未定义书签。

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

     错误 ! 未定义书签。

     规则 2.12 SQL 语句的关键字 SELECT、FROM、WHERE、AND 等,必须尾部对齐。

     ............................................................................................................. 26

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

     26

     规则 2.14 SQL 语句中不能有注释,如“/**/”、“--”等,注释写在 SQL语句的外面。

     ......................................................................................................... 26

     规则 2.15 SQL 语句中的对齐方式用空格对齐,SQL 语句到“EXEC SQL”之间用 TAB 对齐。

     ................................................................... 错误 ! 未定义书签。

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

     错误 ! 未定义书签。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 4 页 共 27 页 3

     注释规则 ................................................................................................................. 13

     规则 3.1 对象注释要求

     ................................................................................. 13

     规则 3.2 文件注释

     ......................................................................................... 13

     规则 3.3 过程与函数的注释

     ............................................ 错误 ! 未定义书签。

     规则 3.4 变量注释

     ............................................................ 错误 ! 未定义书签。

     规则 3.5 参数注释

     ............................................................ 错误 ! 未定义书签。

     规则 3.6 功能性注释

     ..................................................................................... 14

     规则 3.7 单行注释

     ......................................................................................... 13

     4

     命名规范 .................................................................................... 错误!未定义书签。

     4.1

     数据库对象 .................................................................. 错误! 未定义书签。

     建议 4.1 命名长度和结构

     ................................................ 错误 ! 未定义书签。

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

     ................................ 错 误 ! 未定义书签。

     规则 4.3 年月日等数字

     .................................................... 错误 ! 未定义书签。

     规则 4.4 区分非正式表

     .................................................... 错误 ! 未定义书签。

     规则 4.5 命名特例

     ............................................................ 错误 ! 未定义书签。

     4.2

     PL/SQL 程序块内变量 .................................................... 错误! 未定义书签。

     规则 4.6 程序块内变量命名

     ............................................ 错误 ! 未定义书签。

     4.3

     E-SQL 源文件 .................................................................. 错误! 未定义书签。

     规则 4.7:E-SQL 源文件命名

     .......................................... 错误 ! 未定义书签。

     4.4

     常用英文缩写字典 ...................................................... 错误! 未定义书签。

     规则 4.8:业务操作类

     ...................................................... 错误 ! 未定义书签。

     规则 4.9:业务名词类

     ...................................................... 错误 ! 未定义书签。

     5

     SQL 程序编码规则 ................................................................................................ 15

     5.1

     PL/SQL 程序块 ................................................................ 错误! 未定义书签。

     规则 5.1 简单函数或过程

     ................................................ 错误 ! 未定义书签。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 5 页 共 27 页 规则 5.2 不允许使用内嵌函数或过程

     ............................ 错误 ! 未定义书签。

     规则 5.3 复杂函数或过程

     ................................................ 错误 ! 未定义书签。

     5.2

     E-SQL 程序 ...................................................................... 错误! 未定义书签。

     规则 5.4 SQL 语句出错判断,使用 NOTFOUND、SQLOK 等宏判断 SQL语句是否正确执行。

     ................................................................ 错误 ! 未定义书签。

     规则 5.5 E-SQL 使用自己的出错控制,不使用 E-SQL 提供的统一出错控制,E-SQL 的出错一般设置为无效。

     .................................... 错误 ! 未定义书签。

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

     ... 错误 ! 未定义书签。

     5.3

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

     规则 5.7 不允许使用 SELECT

     *

     ................................................................ 15

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

     ................................................... 15

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

     ......................................................... 15

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

     ................................................................. 15

     规则 5.11 使用表的别名

     .............................................................................. 15

     6

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

     6.1

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

     规则 6.1 添加索引提高效率

     ......................................................................... 16

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

     ....................................... 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 删除全表 ........... 错误 ! 未定义书签。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 6 页 共 27 页 建议 6.10 特大事务多使用 COMMIT

     ............................. 错误 ! 未定义书签。

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

     ............................................. 18

     建议 6.12 用 EXISTS 替代 IN

     ...................................................................... 19

     建议 6.13 用 NOT EXISTS 替代 NOT IN

     .................................................... 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.1

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

     规则 8.1 DML/DDL 语句需说明功能和要求

     ................................................ 25

     规则 8.2 游标使用结束后必须关闭

     ............................................................. 25

     8.2

     E-SQL 安全 ...................................................................... 错误! 未定义书签。

     规则 8.3 PROC 程序中禁止出现用户名和密码

     ............. 错误 ! 未定义书签。

     8.3

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

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

     ............................................ 25

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 7 页 共 27 页 1 1 概述

     制定编码规范的最主要的目的是为了对产出代码的长期维护。通常负责维护代码的人大多都不是开发者本人,如果有一个统一的代码格式以及说明就可以减少混淆提高理解速度。因此,下列的编码规范是基于良好的编码习惯和可读性的原则来制定的。

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

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

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

     建议:

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

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

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

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 8 页 共 27 页 2 2 命名规范

     2.1 数据库对象 命名对象范围:ORACLE 数据库对象,包括表、索引、存储过程、触发器、序列、视图、同义词、数据链路。

     建议 议 2.1 命名长度和结构 对象名不超过 30 个字符,不低于 6 个字符,建议在 8-25 个左右。

     由 3-5 部分构成,每部分为有一定含义的英文缩写或者数字。每部分建议为 3-4 个字符。

     英文缩写参见“常见缩写字典”。

     则 规则 2.2 不得出现省市、项目简称 不允许出现某省某地市或某项目的简称,例如 sc_CustInfo 中的 sc 是不许可的。

     则 规则 2.3 年月日等数字 年月日数字符号,一般应在数据表的尾部。不允许将年月日及其它数字放在对象名的中间。

     例如,Cust200703Info 不许可,CustInfo200703 则许可。

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

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 9 页 共 27 页 ‘bakyymmdd_’,以便于识别和及时清理。

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

     则 规则 2.5 命名特例 编号 数据库对象 格式范例 备注 1.

     全局临时表(golbal temporary table) gTmp_XxxYyyZzz 全局临时表属于 ORACLE 的一种特殊的表类型,不是指‘临时’创建的非正式表 2.

     视图 View_XxxYyyZzz

     3.

     普通索引 Idx_TabName_ColumnName ColumnName 是该索引第一个字段的简写 4.

     主键索引 Idx_TabName_Pk

     5.

     同义词 必须与原对象名一致 若已存在相同的对象名,必须合理调整该冲突对象名或者放弃使用同义词 6.

     触发器 Trig_XxxYyyZzz

     7.

     存储过程 Proc_XxxYyyZzz

     8.

     程序包 Pkg_ XxxYyyZzz

     9.

     函数 Func_XxxYyyZzz

     10.

     序列 Seq_XxxYyyZzz

     11.

     数据链路 Link_UserName_DbName DBNAME 是指远程数据库的名称,USERNAME 是指该远程库的用户名 12.

     分区表中的分区名 Part_Xxx

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 10 页 共 27 页 2.2 常用英文缩写字典 则 规则 2.8:

     :

     业务操作类 中文名称 英文名称 英文缩写 读取 get get 设置 set set 查询 query qry 变更 change chg 提交、确认 confirm cfm 冲正、回滚 rollback roll 验证 validate vali 比较 compare cmp 创建 create crt 选择 select sel 插入 insert ins 修改 update upd 删除 delete del 转移 transfer tran 替换 replace rpl 计算 calculate calc 统计 statistic stat 申请 request req 预约、预订 book book 订购 order ord 退订 cancel canc 打开 on on 关闭 off off 配置 config cfg 分配 allocate allo 结算 mediation med

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 11 页 共 27 页 费用 fee fee 发布 release rls 跟踪 trace trac 清除 clear clr 稽核 audit aud 开户、入网 open open 业务变更 change chg 查询 query qry 过户 Change customer chgCust 缴费 payment pay 托收 contract con 则 规则 2.9:

     :

     业务名词类 中文名称 英文 名称 英文缩写 代码 code code 类型 type type 标识 identifier id 号码 No. no 序号 seriation ser 名称 name name 消息 message msg 信息 information info 历史 history his 日志 log log 密码 password psw 状态 status sta 日期 date date 时间 time time 科目 item item 关系 relation rlt

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 12 页 共 27 页 组织、机构 organization org 角色 role role 地址 address addr 担保 assurer ass 版本 version ver 级别 level lev 电话 phone ph 合同 contract con 发票 invoice inv 接口 interface intf 操作 opration op 功能 function func 客户 customer cust 集团 group grp 用户 subscriber sub 帐户 account acc 产品 product prd 服务 service svc 价格 price pri 资源 resource res 权限 power pow

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 13 页 共 27 页 3 3 注释规则

     则 规则 3.1 对象注释要求 创建每一数据库对象时都要加上 COMMENT ON 注释,以说明该对象的功能和用途;建表时,对某些数据列也要加上 COMMENT ON 注释,以说明该列和/或列取值的含义。

     示例:

     comment on table RasInfo.TD_UserInfo is

     "普通地区用户信息表,用于记录除成都外的其他地区的用户信息,按地区分区"; comment on column RasInfo.TD_UserInfo.UserCode is "用户编码,主键"; 则 规则 3.7 单行注释 SQL 程序中,尽量采用单行注释:’--’。

     标准注释,但是只能注释一行

     还有:

     /* Formatted on 2010/11/22 10:47 (Formatter Plus v4.8.6) */

     则 规则 3.2 文件 注释 在每个 SQL 脚本文件的开头,要用块注释,进行文件功能说明,文件编写人、联系方式和文件创建时间说明等。

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

     示例:

     ----------------------------- --

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

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

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 14 页 共 27 页 -- --

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

      2007.02.28 开始创建 ------------------------------ 则 规则 3.6 功能性注释 对较为复杂的 SQL 语句应注释,并说明算法和功能。

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

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

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

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 15 页 共 27 页 4 4 L SQL 程序 编码 规则

     4.1 可读性 要求 则 规则 5.1 不允许使用 SELECT

     * 使用 SELECT 语句时,不允许使用 SELECT *,要使用明确的列名。目的是防止数据字段增加后的影响。

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

     则 规则 5.3 函数 及表达式放在等号左边 应将 SQL 语句中的数据库函数、计算表达式等放置在等号右边。不要在等号的左边。

     则 规则 5.4 不等于统一使用"<>" Oracle 认为"!="和"<>"是等价的,都代表不等于的意义。为了统一,不等于一律使用"<>"表示。

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

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 16 页 共 27 页 5 5 L SQL 性能 规则与建议

     5.1 性能相关 的规则 则 规则 5.1 添加 索引 提高效率

      对大表的操作,业务规范后,必须建立相应的索引,以提高查询效率。

     则 规则 5.2 WHERE 子句中 不应 对索引列 使用函数 不要在 WHERE 子句中,不应该对索引列施以函数,否则该索引将无法使用。

     则 规则 5.3 为共享 SQL 语句,要使用绑定变量 的 执行相同操作的 SQL 语句必须使用相同名字的绑定变量 例如:第一组的两个 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 from people where pin = :blk1.ot_ind;

     select pin , name from people where pin = :blk1.ov_ind;

      批注 [u1]: 建立索引的目的是加快对表中记录的 查找或 排序。数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

     例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到 ID 等于 44 的这一行被找到为止;有了索引之后(必须是在ID 这一列上建立的索引),直接在索引里面找 44(也就是在 ID 这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位的。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 17 页 共 27 页 5.2 性能相关的 建议 议 建议 5.1 减少子查询的使用 子查询除了可读性差之外,还在一定程度上影响了 SQL 运行效率. 应尽量减少子查询的使用,采用其他效率更高、可读性更好的方式替代。

     议 建议 5.2 使用 DECODE 函数来减少处理时间 使用 DECODE 函数可以避免重复扫描相同记录或重复连接相同的表. 示例:

     SELECT COUNT(*),SUM(SAL)

     FROM EMP

     WHERE DEPT_NO = 0020

     AND ENAME LIKE ‘SMITH%";

      SELECT COUNT(*),SUM(SAL)

     FROM EMP

     WHERE DEPT_NO = 0030

     AND ENAME LIKE ‘SMITH%";

      可以用 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(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL

     FROM EMP

     WHERE ENAME LIKE ‘SMITH%";

      类似的,DECODE 函数也可以运用于 GROUP BY 和 ORDER BY 子句中

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 18 页 共 27 页 议 建议 5.3 用 用 UNION 替换 OR ( 适用于索引列) 通常情况下, 用 UNION 替换 WHERE 子句中的 OR 将会起到较好的效果. 对索引列使用 OR 将造成全表扫描. 注意, 以上规则只针对多个索引列有效. 如果有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”

       低效 :

     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)

     议 建议 5.4 用 用 Where 子句替换 HAVING 子句 避免使用 HAVING 子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过 WHERE 子句限制记录的数目,那就能减少这方面的开销. 示例:

      低效 :

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 19 页 共 27 页 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 != ‘SYDNEY"

     AND REGION != ‘PERTH"

     GROUP BY REGION

     议 建议 5.5 用 用 EXISTS 替代 IN 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用 EXISTS(或 NOT EXISTS)通常将提高查询的效率.

     示例:

      低效 :

     SELECT *

     FROM EMP (基础表)

     WHERE EMPNO > 0

     AND 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")

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 20 页 共 27 页 议 建议 5.6 用 用 NOT EXISTS 替代 NOT IN 无论在哪种情况下,NOT IN 都是最低效的 (因为它对子查询中的表执行了一个全表遍历).可以把它改写成外连接(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"

       ( ( 方法二 : 最高效 )

      SELECT ….

     FROM EMP E

     WHERE NOT EXISTS (SELECT ‘X"

     FROM DEPT D

     WHERE D.DEPT_NO = E.DEPT_NO

     AND DEPT_CAT = ‘A"); 议 建议 5.7 用表连接替换 EXISTS 通常来说 , 采用表连接的方式比 EXISTS 更有效率。

     SELECT ENAME

     FROM EMP E

     WHERE EXISTS (SELECT ‘X"

     FROM DEPT

     WHERE DEPT_NO = E.DEPT_NO

     AND DEPT_CAT = ‘A");

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 21 页 共 27 页  ( ( 更高效 )

      SELECT ENAME

     FROM DEPT D,EMP E

     WHERE E.DEPT_NO = D.DEPT_NO

     AND DEPT_CAT = ‘A" ;

     议 建议 5.8 用 用 EXISTS 替换 DISTINCT 当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT 子句中使用 DISTINCT。一般可以考虑用 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);

     议 建议 5.9 避免在索引列上使用计算 WHERE 子句中,如果索引列参与计算,优化器将不使用索引而使用全表扫描。

     示例:

      低效:

     SELECT …

     FROM DEPT

     WHERE SAL * 12 > 25000;

       高效 :

      SELECT …

     FROM DEPT

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 22 页 共 27 页 WHERE SAL > 25000/12;

     议 建议 5.10 避免在索引列上使用 NOT 避免在索引列上使用 NOT, NOT 会产生在和在索引列上使用函数相同的影响. 当 ORACLE”遇到”NOT,会停止使用索引转而执行全表扫描。

     示例:

      低效 : ( 不使用索引 )

      SELECT …

     FROM DEPT

     WHERE NOT DEPT_CODE = 0;

       高效 : ( 使用了索引 )

      SELECT …

     FROM DEPT

     WHERE DEPT_CODE <> 0;

      需要注意的是,在某些时候, ORACLE 优化器会自动将 NOT 转化成相对应的关系操作符。

     NOT > to <=

     NOT >= to <

     NOT < to >=

     NOT <= to >

     议 建议 5.11 用>= 替代>

      高效 :

     SELECT *

     FROM EMP

     WHERE DEPTNO >=4

       低效 :

     SELECT *

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 23 页 共 27 页 FROM EMP

     WHERE DEPTNO >3

      两者的区别在于, 前者 DBMS 将直接跳到第一个 DEPT 等于 4 的记录而后者将首先定位到 DEPTNO=3 的记录并且向前扫描到第一个 DEPT 大于 3 的记录。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 24 页 共 27 页 6 6 程序 质量保证

     则 规则 6.1 运行日志 是指 SQL 运行点的输出日志。要求程序一定要使用日志语句,在运行过程输出。

     日志的输出,可以是数据表,或者通过 Java 函数,或者 UT_FILE 包,书写到操作系统文件。

     运行日志必须设置调试开关,在生产环境有效屏蔽其在开发测试环境输出的日志。

     则 规则 6.2 错误日志 系统容错处理的日志,一定要与运行日志分开。使用数据表时,错误日志的数据表与运行日志表不同; 使用操作系统文件时,错误日志文件名与运行日志文件名不同。

     则 规则 6.3 工作日志 系统关键性的 SQL 执行情况,应包括语句、记录数等的日志,便于程序上线后维护。

     则 规则 6.4 异常检查 SQL 程序,一定使用 BEGIN/EXCEPTION/END 代码块,进行错误捕获,并输出错误日志。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 25 页 共 27 页 7 7 安全保障

     7.1 PL/SQL 安全 则 规则 7.1 DML/DDL 语句 需 说明功能和要求 Insert/delete/update 语句以及脚本中的 CREATE/DROP/ALTER 命令,应添加注释说明其功能和要求。

     则 规则 7.2 游标 使用结束后必须关闭 7.2 数 数 据库操作 则 规则 7.1 DML/DDL 操作应显式写明 对象 属主 数据库的表应用,独立的存储过程,独立的函数,或者处理包的开头,带上明确的数据对象属主,以避免误操作。

     例如:dbcustadm.dcustmsg,

     CREATE OR REPLACE PACKAGE dbRevass.pkgOweSum_BASE

      AS

      BEGIN

      END;

     批注 [u2]: 数据操作语言 批注 [u3]: 数据定义语言 批注 [u4]: 游标(cursor)是系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果。每个游标区都有一个名字。用户可以用 SQL 语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。

     Transact_SQL 游标,API 服务器游标和客户游标

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 26 页 共 27 页 8 8 排版规则

     则 规则 8.1

     SQL 语句的关键字 SELECT、FROM、WHERE、AND 等,必须尾部对齐。

     则 规则 8.2

     语句的结束符“;”,放在语句的结束位置,不单独起一行。

     则 规则 8.3

     SQL 语句中不能有注释,如“/**/”、“--”等,注释写在 SQL 语句的外面。

     则 规则 8.4 空格 SQL 内算数运算符、逻辑运算符连接的两个元素之间必须用空格分隔。

     逗号之后必须接一个空格。

     关键字、保留字和左括号之间必须有一个空格。

     SQL 编码规范

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

      地址:北京市海淀区上地九街 9 号数码科技广场二层(100085) 电话 (Tel) :(010)

     58856600

      传真 (Fax):(010)

     62969630

      第 第 27 页 共 27 页

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识