ORACLE设计规范
Oracle数据库命名规范

1.Oracle数据库命名规范数据库命名规范总体上以“汉语拼音和常见英语单词相结合”的方式,汉语拼音即是采用每一个汉字拼音的第一个字母的方式。
英语单词采用整个英文单词或可以识别的英文单词缩写的方式。
数据库字段命名原则总统上同数据库命名,采用“汉语拼音和常见英语单词相结合”方式命名。
这里单独出来主要是强调本系统字段命名需要额外遵循如下规则:1)字段名称的唯一性:即同一含义的字段在整个系统范围内中必须有相同的字段名。
不能有类似一个表中的备注字段用“BeiZhu”,另一表中的备注却用“Remark”、“Desc”、“XXRemark”等。
2)字段含义唯一性:即系统同一字段名称必须有同一含义。
不能有类似“Name”在一个表中表单位名称,在另外一个表中表项目名称,这种情况需要加前缀区分。
3)所有字段名不能以SM开头,目的是避免与SuperMap保留字段前缀混淆4)空间表中:字段顺序以空间信息字段在前,属性信息字段在后原则。
5)属性表中:字段顺序以主次顺序设计,用于空间定位的字段放在最后原则。
1.1表属性规范1)表名前缀为Tbl_。
数据表名称必须以有特征含义的单词或缩写组成,中间可以用“_”分割,例如:tbl_pstn_detail。
表名称不能用双引号包含。
2)表分区名前缀为p。
分区名必须有特定含义的单词或字串。
例如:tbl_pstn_detail的分区p2004100101表示该分区存储2004100101时段的数据。
3)字段名字段名称必须用字母开头,采用有特征含义的单词或缩写,不能用双引号包含。
4)主键名前缀为PK_。
主键名称应是前缀+表名+构成的字段名。
如果复合主键的构成字段较多,则只包含第一个字段。
表名可以去掉前缀。
5)外键名前缀为FK_。
外键名称应是前缀+外键表名+主键表名+外键表构成的字段名。
表名可以去掉前缀。
1.2索引1)普通索引前缀为IDX_。
索引名称应是前缀+表名+构成的字段名。
如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。
Oracle数据库设计规范建议

Oracle数据库1 数据对象的命名规范1.1 通用规范1.1.1 使用英文:要用简单明了的英文单词,不要用拼音,特别是拼音缩写。
主要目的很明确,让人容易明白这个对象是做什么用的;1.1.2 一律大写,特别是表名:有些数据库,表的命名乃至其他数据对象的命名是大小写敏感的,为了避免不必要的麻烦,并且尊重通常的习惯,最好一律用大写;1.2 数据库对象命名规范1.2.1 表的命名1.2.1.1 表名的前缀:前缀_表名_T。
为表的名称增加一个或者多个前缀,前缀名不要太长,可以用缩写,最好用下划线与后面的单词分开;其目的有这样几个:1.2.1.1.1 为了不与其他项目或者其他系统、子系统的表重名;1.2.1.1.2 表示某种从属关系,比如表明是属于某个子系统、某个模块或者某个项目等等。
表示这种从属关系的一个主要目的是,从表名能够大概知道如何去找相关的人员。
比如以子系统为前缀的,当看到这个表的时候,就知道有问题可以去找该子系统的开发和使用人员;1.2.2 视图命名:相关表名_V(或者根据需要另取名字);1.2.3 程序包命名:程序包名_PKG(用英文表达程序包意义);1.2.4 存储过程命名:存储过程名_PRO(用英文表达存储过程意义);1.2.5 函数命名:函数名称_FUN(用英文表达函数作用);1.2.6 触发器命名:触发器名称_TRI(用英文表达触发器作用);1.2.7 索引命名:表名_字段名_IDX(如果存在多字段索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail 上建立联合索引,命名为表名_cus_cut_cur_IDX,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立联合索引,就命名为表_tid_tom_tna_IDX;1.2.8 唯一索引命名:表名_字段名_UNI(如果存在多字段唯一索引,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立唯一索引,命名为表名_ cus_cut_cur_UNI,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如:在 custid, custom,custname上建立唯一索引,命名:表_tid_tom_tna_UNI;1.2.9 主键命名:表名_字段名_PK(如果存在多字段主键,取每字段前三个字符加下划线组合,如在 custom, cutting, curtail上建立主键,命名为表名_cus_cut_cur_PK,如果前三个截取字符相同,就从字段名称中不同的字符开始取三个字符加下划线组合,如在 custid, custom,custname上建立主键,命名:表_tid_tom_tna_PK;1.2.10 外键命名:表名_主表名_字段名_FK;1.2.11 Sequence命名:表名_列名_SEQ(或者根据需要另取名字);1.2.12 Synonym命名:与对应的数据库对象同名;1.2.12 JAVA命名:遵守公司相应的JAVA命名规范;2 SQL的设计和使用2.1 Sql 书写规范2.1.1 尽量不要写复杂的SQL:过于复杂的S QL可以用存储过程或函数来代替,效率更高;甚至如果能保证不造成瓶颈的话,把条SQL拆成多条也是可以的。
(完整版)Oracle数据库规划设计和运行维护方案

Oracle数据库规划设计和运行维护方案(V1。
0)目录1。
前言 (6)1。
1. 编写目的 (6)1。
2。
方案说明 (6)1.3. 预期读者 (7)2。
数据库部署模式 (7)2.1. 单机模式 (7)2.2. 双机热备模式(HA模式) (8)2.3。
集群模式(RAC) (9)2。
4. 主从模式(DataGuard) (10)2.5。
混合模式(DataGrard+RAC) (10)2。
6。
数据库运行模式选择 (11)3。
系统特点和数据库类型 (11)3。
1。
业务系统的特点 (11)3。
1.1。
OLTP特点 (12)3.1.2。
OLAP特点 (13)3。
2。
数据库的规模 (13)3.3。
数据库版本建议 (13)4. 数据库运行环境规划 (14)4.1。
主机规划 (14)4。
2. 网络规划 (15)4.3. 存储规划 (17)5。
数据库安装部署规划 (19)5.1。
软件安装路径 (19)5。
2. 表空间设计 (19)5.2.1. 业务数据量估算 (19)5。
2。
2。
表空间使用规则 (21)5.2.3。
表空间的概念和分配原则 (25)5。
2.4。
表空间的参数配置 (26)5.2。
5. Undo/temp表空间的估算 (30)5.2。
6. 表的参数设置 (30)5.2。
7. 索引的使用原则 (31)5。
3. 文件设计 (32)5.3。
1. RAC配置文件 (32)5.3。
2. 参数文件 (33)5。
3。
3. 控制文件 (34)5。
3.4。
重做日志文件 (35)6。
数据库应用规划 (37)6。
1。
数据库用户设计 (37)6。
1。
1。
用户权限规划 (37)6.1.2。
用户安全实现 (39)6。
1。
3. 用户类型及角色命名规范 (41)6.2. 数据库分区 (44)6.2。
1. 数据库分区介绍 (44)6。
2.3. 物理分割 (45)6。
2。
4. 数据分区的优点 (45)6.2.5. 数据分区的不足 (45)6.2。
oracle数据库设计课程设计

oracle数据库设计课程设计一、课程目标知识目标:1. 理解Oracle数据库的基本概念,掌握数据库设计的基本原理;2. 学会使用SQL语言进行数据库的基本操作,如创建表、查询数据、更新数据等;3. 掌握数据库设计规范,能够设计出结构合理、性能优良的数据库表结构;4. 了解数据库的安全性和一致性约束,能够为数据库设置合理的约束条件。
技能目标:1. 能够运用所学知识独立完成小型信息系统的数据库设计;2. 能够熟练运用SQL语言进行数据库的操作,解决实际问题;3. 能够运用数据库设计原则对现有数据库进行优化,提高数据库性能;4. 能够分析实际业务需求,撰写数据库设计文档,为软件开发提供支持。
情感态度价值观目标:1. 培养学生对数据库技术的兴趣,激发学习积极性,提高自主学习能力;2. 培养学生具备良好的团队合作精神,能够在团队项目中发挥积极作用;3. 培养学生严谨、细致的学习态度,对待数据库设计和操作能够认真负责;4. 通过数据库技术在实际案例中的应用,使学生认识到信息技术对社会发展的积极作用,增强社会责任感。
二、教学内容1. Oracle数据库基础知识- 数据库概念、发展历史及Oracle数据库特点- 数据库体系结构、数据库存储结构- SQL*Plus工具的使用2. SQL语言基础- 数据定义语言(DDL):创建、修改、删除表- 数据操纵语言(DML):插入、查询、更新、删除数据- 数据控制语言(DCL):权限管理、事务控制3. 数据库设计原理- 实体关系模型(ER模型)及其转换- 数据库设计范式:1NF、2NF、3NF、BCNF- 数据完整性、约束条件设置4. Oracle数据库高级应用- 索引、分区、视图、序列的应用- 存储过程、函数、触发器的创建与使用- 数据库性能优化、备份与恢复5. 实践项目- 设计一个小型信息系统的数据库,包括表结构设计、数据操作、完整性约束设置等- 对数据库进行性能优化,分析并解决性能瓶颈- 撰写数据库设计文档,进行项目展示与交流教学内容按照以上五个方面进行组织,确保学生能够系统地掌握Oracle数据库的设计与应用。
oracle,外键命名规范

竭诚为您提供优质文档/双击可除oracle,外键命名规范篇一:数据库(oracle)命名规范命名规范(oracle数据库)1表命名命名最好望文生义,避免使用数据库关键词命名一律为大写字母(不要大下写混合)英文单词单数命名.例:FactoRy 英文单词缩写命名.例:dept英文单词之间用下划线连结,且每个单词皆为单数.例:task_Result用来存储历史资料,命名以histoRy结尾.例:task_his用来存储日志资料,命名以log结尾.例:task_log用来存储类别资料,命名以type结尾.例:task_type2表字段命名最好望文生义,避免使用数据库关键词英文单词单数命名.例:mail英文单词缩写命名.例:dept_id英文单词之间用下划线连结,且每个单词皆为单数.例:useR_name字段用来存储流水号,命名以id结尾.例:task_id字段用来存储代码,命名以no结尾.例:task_no字段用来存储类别,命名以type结尾.例:station_type字段用来存储名称,命名以name 结尾.例:enduseR_name字段用来存储描述,命名以desc结尾.例:station_desc字段用来存储代码,命名以code结尾.例:eRRoR_code字段用来存储标志,命名以Flag开头.例:debug_Flag3索引命名以表名+index+两位流水号(01~99).例:enduseR_index014键值主键命名以表名+pk+一位流水号(1~9).例:dept_pk1附键命名以表名+ak+一位流水号(1~9).例:dept_ak1外键命名以表名+Fk+一位流水号(1~9).例:dept_Fk1检查条件以表名+ck+一位流水号(1~9).例:dept_ck15视图命名以V_开头例:V_dept其它规则参考资料表命名规则6触发器以表名+tR+一位流水号(1~9)命名.例:dept_tR17存储过程命名以pc开头实现单一资料表交易功能,以pc+表名命名.例:pc_line实现关联资料表交易功能,以pc+功能命名.例:pc_getdata命名需让人明白其主要功能8函数检查功能的函数,以is+检查项目命名.例:boolischarValid(char)获取资料功能的函数,以get+数据项命名.例:stringgetlineno(char)设定资料功能的函数,以set+数据项命名.例:intsetlineno(char)9序列命名以seq开头以表的字段名命名.例:seq_line_id若与其它表的字段名相同,则以表名+字段名命名.例:seq_code_type_id10表空间存储资料的命名为项目名称.例:cRm存储索引的命名为项目名称+idx.例:cRmidx存储历史的命名为项目名称+old.例:cRmold存储临时的命名为项目名称+log.例:cRmlog.11数据文件命名以所属表空间开头+两位流水号(01~99)+.oRa.例:cRm01.oRa12包命名以功能缩写开头+pkg+流水号(1~9).例:cRmpkg1篇二:oRacle对象命名规范oracle对象命名规范(试用稿)20xx年4月修改说明正文目录1引言................................................. ................................................... .....................41.11.21.32目的................................................. ................................................... ..............4范围................................................. ................................................... ..............4参考资料................................................. ................................................... (4)国网标准化命名规范.............................................................................................42.12.2 2.32.42.5基本原则................................................. ................................................... ......4实体(表)的英文命名规则................................................. .........................4属性(列)的英文命名规则................................................. .........................5主键的英文命名规则................................................. .....................................6外键的英文命名规则................................................. . (6)3内部补充命名规范................................................. ..............错误!未定义书签。
oracle数据库开发规范

编程规范1:所有数据库关键字和保留字都大写;字段、变量的大小写2:程序块采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。
必须使用空格,不允许使用【tab】键。
3:当同一条语句暂用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。
4:不允许多个语句写到一行,即一行只写一条语句。
5:避免把复杂的SQL语句写到同一行,建议要在关键字和谓词处换行。
6:相对独立的程序块之间必须加空行。
BEGIN、END独立成行。
7:太长的表达式应在低优先级操作符处换行,操作符或关键字应放在新行之首。
不同类型的操作符混合使用时,用括号隔离,使得代码清晰。
8: 不同类型的操作符混合使用时,应使用括号明确的表达运算的先后关系。
9:运算符以及比较符左边或者右边只要不是链接的括弧,则空一格。
10:if 后的条件要用括号括起来,括号内每行最多两个条件。
11:减少控制语句的检查次数,如在else( if..else)控制语句中,对最常用符合条件,尽量往前被检查到。
尽量避免使用嵌套的if 语句,在这种情况应使用多个if 语句来判断其可能。
命名规范1:不使用数据库关键字和保留字,为了避免不必要的冲突和麻烦。
2:严禁使用带空格的名称来给字段和表命名,会出错误而终止。
3:用户自定义数据库对象:表,视图,主外键,索引,触发器,函数,存储过程,序列,同义词,数据库连接,包,包体风格要保持一致。
数据库名称1-8个字符,其他对象1-30个字符,数据库连接不操过30个字符。
使用英文字母、数字、下划线。
除表外,其他对象命名最好用不同的前缀来区别。
表tbl_/t_视图v_序列seq_簇c_触发器trg_存储过程sp_/p_函数f_/fn_物化视图mv_包和包体pkg_类和类体typ_主键pk_外键fk_唯一索引uk_普通索引idx_位图索引bk_4:PL/SQL对象和变量命名规则输入变量i_输出变量o_输入输出变量io_普通变量v_全局变量gv_常量大写游标cur_用户自定义类型type_保存点spt_不允许使用中文和特殊字符用户对象命名应全部为小写,且不允许使用控制符号强制转换对象为小写字符变量命名,要有具体含义,能表明变量类型。
数据库命名设计规范

数据库命名、设计规范一、数据库表及字段1.数据库表的命名规范:表的前缀应该用系统或模块的英文名的缩写(全部大写)。
如果系统功能简单,没有划分为模块,则可以以系统英文名称的缩写作为前缀,否则以各模块的英文名称缩写作为前缀。
例如:如果有一个模块叫做BBS(缩写为BBS),那么你的数据库中的所有对象的名称都要加上这个前缀:BBS_ + 数据库对象名称,BBS_CustomerInfo标示论坛模块中的客户信息表。
表的名称必须是易于理解,能表达表的功能的英文单词或缩写英文单词,无论是完整英文单词还是缩写英文单词,单词首字母必须大写。
如果当前表可用一个英文单词表示的,请用完整的英文单词来表示;例如:系统资料中的客户表的表名可命名为:SYS_Customer。
如果当前表需用两个或两个以上的单词来表示时,尽量以完整形式书写,如太长可采用两个英文单词的缩写形式;例如:系统资料中的客户物料表可命名为:SYS_CustItem。
表名称不应该取得太长(一般不超过三个英文单词)。
表名长度不能超过30个字符,表名中含有单词全部采用单数形式,单词首字母必须大写。
在命名表时,用单数形式表示名称。
例如,使用 Employee,而不是 Employees。
对于有主明细的表来说。
明细表的名称为:主表的名称 + 字符Dts。
例如:采购定单的名称为:PO_Order,则采购定单的明细表为:PO_OrderDts;对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序,如1,2,3……。
表必须填写描述信息,后台表名尽量与前台表名相同,后台独有的表应以_b作为后缀。
如r_gggd_b。
数据库表的命名采用如下规则:1)表名用模块名_开头,表名长度不能超过30个字符,表名中含有单词全部采用单数形式,单词首字母必须大写。
2)多个单词间用下划线(_)进行连接。
ORACLE数据库设计规范

1 命名原则约定ü? 是指对数据库、数据库对象如表、字段、索引、序列、存储过程等的命名约定;ü? 命名使用富有意义的英文词汇,尽量避免使用缩写,多个单词组成的,中间以下划线分割ü? 避免使用Oracle的保留字如LEVEL、关键字如TYPE(见Oracle保留字和关键字);ü? 各表之间相关列名尽量同名;ü? 除数据库名称长度为1-8个字符,其余为1-30个字符,Database link名称也不要超过30个字符;ü? 命名只能使用英文字母,数字和下划线;?表名规则如下:命名规则为xxx_yyy_TableName。
xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy表示子系统中的子模块的名称(可以没有), 最多五个字母构成,尽量用简称;TableName为表含义, 最多十个字母构成,尽量用简称?TableName规则如下:ü? 使用英文单词或词组作为表名,不得使用汉语拼音ü? 用名词和名词短语作表名ü? 不使用复数?正确的命名,例如:fiber_sys_userfiber_biz_order?存储过程规则如下:命名规则为xxx_yyy_StoredProcedureName。
xxx表示开发公司的名称,最多五个字母构成,尽量用简称;yyy表示子系统中的子模块的名称(可以没有), 最多五个字母构成,尽量用简称;StoredProcedureName为存储过程含义,最多十个字母构成,尽量用简称?StoredProcedureName规则如下:ü? 用动词或动词短语来命名,并带有宾语ü? 需要符合用Pascal 命名规则。
ü? 尽量谨慎地使用缩写ü? 尽量不要和关键字重合ü? 不要用任何名前缀 (例如 U,B)ü? StoredProce dureName内不使用下划线ü? 当操作依赖条件时,一般结尾使用 By+条件?存储过程正确的命名,例如:sys_InsertUsersys_SearchUserByUserIDsys_DeleteUserByUserID?视图规则如下:ü? 视图的命名采用xxx_yyy_ViewName_v。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE设计规范1、数据库模型设计方法规范1.1、数据建模原则性规范1.2、实体型之间关系认定规范1.3、范式化1NF的规范1.4、范式化2NF的规范1.5、范式化3NF的规范1.6、反范式化冗余字段使用规范1.7、数据库对象命名基本规范第一:长度规范:凡是需要命名的对象其标识符均不能超过30个字符,也即:Oracle中的表名、字段名,函数名,过程名,触发器名,序列名,视图名的长度均不能超过30个字符;第二:构成规范:数据库各种名称必须以字母开头,但严禁使用SYS开头;名称只能含有字母,数字和下划线“_”三类字符,“_”用于间隔名称中的各语义字段;不要使用DUAL作表名;第三:大小写规范:构成Oracle数据库中的各种名称(表明,字段名,过程名,视图名等等)的所有字符,必须使用大写,也就是不能在脚本中,对任何名称添加双引号“”来设定字符的大小写形式,只要不采用“”限制,Oracle自动会将各名称转化成大写。
2、表的设计规范2.1、表的主键规范遵循如下三点原则:第一:有无原则:除临时表和外部表,以及流水表,日志表外,其他表都要建立主键;第二:构成原则:主键不能使用含有实际语义的列,应该增加一个xx_id字段做主键,类型为number,取值来自序列sequence;第三:创建原则:对于500万以上的表,请数据组参与设计实施,采用先建唯一索引再添加主键约束的方式来创建主键;2.2、表的主键列规范对于实体表,主键就是一列,就是没有任何语义的自增的NUMBER列,对于关系表,主键就是相关实体表主键形成的复合主键,是多列;2.3、使用注释的规范2.4、一个表所含字段总长度的规范2.5、一个表所含字段访问频繁度的规范2.6、一个表所含数据量的规范2.7、大对象字段(BLOB,CLOB)使用规范2.8、增量同步表的设计规范字典信息表和需要使用增量同步的表必须增加如下属性:2.9、表的表空间使用规范2.10、索引的表空间使用规范3、设计分区表的规范3.1、RANGE分区的规范3.2、LIST分区的规范3.3、HASH分区的规范3.4、RANGE-LIST分区的规范3.5、RANGE-HASH分区的规范4、索引的设计规范4.1、主键索引的规范4.2、唯一约束索引的规范4.3、外键列索引的规范4.4、复合索引的规范4.5、函数索引的规范4.6、位图索引的规范4.7、反向索引的规范4.8、分区索引的规范4.9、索引重建的规范5、SQL访问规范5.1、避免SELECT *程序中不能出现SELECT*,即使是选择全部选择项,也需要全部指明,这主要出于如下原因:第一:使用*相对比较慢,因为Oracle 需要遍历更多的内部字典信息;第二:为避免以后相关表增加字段造成程序错误,比如INSERT INTO SELECT和SELECT INTO语句会报错;5.2、避免笛卡尔运算多表关联查询不能出现笛卡尔积,如果在报表中为集聚表(或称中间表)生成多个维度组成的复合主键需要使用迪克尔积的,必须请数据组确认性能。
5.3、使用CTAS备份在进行DML操作(INSERT,UPDATE,DELETE)之前,必须对数据进行备份,使用如下语句:方法一:表数据全部备份:CREATETABLE TAB_NAME_BAK AS SELECT * FROM TAB_NAME;方法二:部分备份:对大表仅备份将要修改的数据:CREATE TABLE TAB_NAME_BAKAS SELECT * FROM TAB_NAME WHERE [选择出被操作数据的条件];5.4、INSERT时需写全列名代码中INSERT语句必须写出全部列名,以保证表增加字段后语句执行不受影响:如:INSERT INTO TAB(COL1,COL2)VALUES(COL1_VAL,COL2_VAL);再如:INSERT INTO TAB(COL1,COL2)SELECT COL1_VAL,COL2_VAL FROM TAB_BB;不能将COL1,COL2和COL1_VAL,COL2_VAL省略;5.5、大数据量的DMLDML操作涉及到大数据量时,请分解为多次执行;对于UPDATE和DELETE每次涉及数据量在1万条左右,并且每次执行完就提交;对于INSERT INTO SELECT如果采用提示(/*+ append parallel */)可以处理百万级别的数据量。
5.6、完成事务及时commit对于一个完成了的事务,请用commit显示提交,这是避免锁争用的锁等待的需要,特别是对DML操作频繁的表;5.7、java的变量绑定使用“变量绑定”来处理一条SQL带不同常量多次执行的情况,动态绑定可以大大优化SQL的执行效率,还可以优化Oracle的内存使用。
在Java中,结合使用setXXX系列方法,可以为不同数据类型的绑定变量进行赋值,从而大大优化了SQL语句的性能。
JAVA情况下的动态绑定示例如下:String v_id = 'xxxxx';String v_sql = 'select name from tb_a where id = ? ';stmt = con.prepareStatement( v_sql );stmt.setString(1, v_id ); //为绑定变量赋值stmt.executeQuery();5.8、perl的变量绑定使用“变量绑定”来处理一条SQL带不同常量多次执行的情况,动态绑定可以大大优化SQL的执行效率,还可以优化Oracle的内存使用。
PERL绑定变量实例如下:$modsql = qq{insert into tmp_tai_rtkpi_mark(tab_name,kpi_id,ne_id,timepoint,cacu_time,start_time,stop_time,down_base,up_base,ajast_flag,inuse_flag,cal_data)values(?,?,?,?,?,?,?,?,?,?,?,?)};if ( !$dbh->prepare($modsql) ) {writeToLog( "start SQL prepare Error!/n" . DBI::errstr . "/n/n" ); }$sth_msg_in_DB = $dbh->prepare($modsql)|| die( "start SQL prepare Error!/n" . $DBI::errstr . "/n" );$sth_msg_in_DB->bind_param( 1, $kpiid_tab{$kpi_id} );$sth_msg_in_DB->bind_param( 2, $kpi_id );$sth_msg_in_DB->bind_param( 3, -1 );$sth_msg_in_DB->bind_param( 4, -1 );$sth_msg_in_DB->bind_param( 5, $current_time );$sth_msg_in_DB->bind_param( 6, $start_time );$sth_msg_in_DB->bind_param( 7, $end_time );$sth_msg_in_DB->bind_param( 8, $temp_min );$sth_msg_in_DB->bind_param( 9, $temp_max );$sth_msg_in_DB->bind_param( 10, 0 );$sth_msg_in_DB->bind_param( 11, 1 );$sth_msg_in_DB->bind_param( 12, -1 );$sth_msg_in_DB->execute() || die( "SQL Execute Error!/n" . $DBI::errstr . "/n" );5.9、避免重复访问:使用group避免重复访问(一):同源单组单查询:如下语句要避免:SELECT CLASS,sum(COL) FROM TAB_TEST WHERE CLASS=’A’ UNION ALLSELECT CLASS,sum(COL) FROM TAB_TEST WHERE CLASS=’B’ UNION ALLSELECT CLASS,sum(COL) FROM TAB_TEST WHERE CLASS=’C’改写成:SELECT CLASS,sum(COL) FROM TAB_TEST GROUP BY CLASS5.10、避免重复访问:竖向显示变横向现实避免重复访问(二):竖向显示变横向显示问题语句:SELECTA.C1AC1,A.C2AC2,A.C3AC3,B.C1BC1,B.C2BC2,B.C3BC3,C.C1CC1,C.C2CC2,C.C3CC3FROM(SELECT'123'X,'SYNONYM'C1, sum(2)C2,count(1)C3FROMTAB WHERE TABTYPE= 'SYNONYM')A,(SELECT'123'X,'TABLE'C1, sum(2)C2,count(1)C3FROMTAB WHERE TABTYPE= 'TABLE')B,(SELECT'123'X,'VIEW'C1, sum(2)C2,count(1)C3FROMTAB WHERE TABTYPE= 'VIEW')C;正确使用形式如下:SELECTMAX(DECODE(TABTYPE,'SYNONYM','SYNONYM',NULL)) AC1,MAX(DECODE(TABTYPE,'SYNONYM',sum(2),0))AC2,MAX(DECODE(TABTYPE,'SYNONYM',count(1),0))AC3,MAX(DECODE(TABTYPE,'TABLE','TABLE',NULL)) BC1,MAX(DECODE(TABTYPE,'TABLE',sum(2),0))BC2,MAX(DECODE(TABTYPE,'TABLE',count(1),0))BC3,MAX(DECODE(TABTYPE,'VIEW','VIEW',NULL)) CC1,MAX(DECODE(TABTYPE,'VIEW',sum(2),0))CC2,MAX(DECODE(TABTYPE,'VIEW',count(1),0))CC3FROMTABWHERETABTYPE IN('TABLE','SYNONYM','VIEW')GROUPBY TABTYPE;5.11、避免重复访问:用表更新表避免重复访问(三):一个表同时更新另一个表的多个字段问题SQL:使用TB_SOURCE表更新表TB_TARGET的多个字段UPDATE TB_TARGET A SETA.COL1 = (selectB.COL1 from TB_SOURCE B where B.id = A.id) ,A.COL2 = (selectB.COL2 from TB_SOURCE B where B.id = A.id) ,A.COL3 = (selectB.COL3 from TB_SOURCE B where B.id = A.id) ,A.COL4 = (selectB.COL4 from TB_SOURCE B where B.id = A.id)WHERE A.id IN ( select B.id from TB_SOURCE B)正确使用形式如下:UPDATE TB_TARGET ASET (COL1, A.COL2, A.COL3, A.COL4 )=(SELECT B.COL1, B.COL2, B.COL3, B.COL4 FROM TB_SOURCE B WHERE B.id = A.id)WHERE EXISTS (select 1 from TB_SOURCE B where B.id = A.id)5.12、数据库连接及时关闭程序中必须显示关闭数据库连接,不仅正常执行完后需显示关闭,而且在异常处理块(例如java的exception段)也要显示关闭。