欢迎来到天天文库
浏览记录
ID:34725189
大小:276.57 KB
页数:43页
时间:2019-03-10
《oracle高效sql编程指南v1.1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、EI产品线协同办公组数据库高效编程指南Confidential(秘密)协同办公组数据库高效编程指南2010.10WrittenByTalkwebTalkweb湖南拓维信息系统有限公司1996,2009AllRightsReservedTW_PROC_DS_303第43页共43页EI产品线协同办公组数据库高效编程指南文档标识:TW_PROC_DS_303当前版本:V1.1当前状态:草稿ü发布日期:发布修改历史日期版本作者修改内容评审号变更控制号2010/10/111.0熊坚新建2011/08/231.1陈虹君修
2、改增加完善TW_PROC_DS_303第43页共43页EI产品线协同办公组数据库高效编程指南写在前面的话规范SQL书写方式,让SQL可以共享,这是大家必须遵守的原则,但后续谈到的所有高效SQL编写原则,都只是建议与一般规则,具体执行还得看SQL执行计划,所以"高效的可能也不一定高效"TW_PROC_DS_303第43页共43页EI产品线协同办公组数据库高效编程指南第1章常用语法1.1变量声明原则:代码中声明与表的字段相对应的变量时,应保证变量名和字段名相同。说明:这样要求的目的是增强可读性。示例:DECLAR
3、Ev_DateFieldT_TABLENAME.DATEFIELD%TYPE;BEGINSELECTDATEFIELDINTOv_DateFieldFROMT_TABLENAMEWHEREROWNUM=1;END;原则:代码中声明与表的字段相对应的变量时,对类型的定义需要使用%TYPE方式。说明:这样表结构的变动不会影响存储过程,避免表结构变更后因变量长度或类型不一致而导致现有程序报错的问题。1.2返回值原则:函数的返回值定义应遵从下列规范:成功出口返回0,失败出口返回大于0整数。过程中定义的用于返回错误码的
4、OUTPUT参数,其定义应遵从下列规范:成功出口返回0,失败出口返回非0整数。1.3符号*原则:脚本中不允许出现“*”的用法,必须用实际的字段名代替,INSERT语句必须指定要插入的字段名。示例:1、游标定义错误用法:TW_PROC_DS_303第43页共43页EI产品线协同办公组数据库高效编程指南CURSORc_CursorNameISSELECT*FROMTABLENAME...正确用法:CURSORc_CursorNameISSELECTFIELD1,FIELD2,...FROMTABLENAME...
5、说明:ORACLE在解析的过程中,会将'*'依次转换成所有的列名,这个工作是通过查询数据字典完成的,需要消耗更多的时间,因此查询时,请在SELECT后把需要查询出的字段列举出来,不要用*代替2、INSERT语句错误用法:INSERTINTOTABLENAMEVALUES...正确用法:INSERTINTOTABLENAME(FIELD1,FIELD2,...)VALUES...1.1包的使用建议:ORACLE的包类似C++中的Class,有包头和包体两部分组成;包能够把相关的功能封装性在一个包中,包里面里可以
6、有函数和过程。PACKAGE与PROCEDURE和FUNCTION的优点是封装性比较好;在开发过程中,可以把功能点紧密相关的PROCEDURE、FUNCTION封装在一个包里面。在对包体进行编译时,调用该包的存储过程不会失效。1.2绑定变量原则:使用绑定变量的SQL语句,能使用绑定变量方式的业务逻辑下不允许使用绑定常量实现。绑定变量目的:实现SQL共享,减少硬解析,减小CPU耗时说明:在存储过程拼SQL语句作为动态SQL执行时,尤其需要注意。示例:错误用法:v_SQL:='DELETEFROMTABLENAM
7、EWHEREFIELD1>SYSDATEANDFIELD2=102';EXECUTEIMMEDIATEv_SQL;TW_PROC_DS_303第43页共43页EI产品线协同办公组数据库高效编程指南正确用法:v_ID:=102;v_SQL:='DELETEFROMTABLENAMEWHEREFIELD1>:1ANDFIELD2=:2';EXECUTEIMMEDIATEv_SQLUSINGSYSDATE,v_ID;原则:为提升性能,减少循环的开销,可以使用批量绑定。说明:下面示例中的UPDATE语句可以一次将多条
8、记录进行更新,而避免了通过使用循环同一条SQL执行多次。示例:CREATEORREPLACEPROCEDUREP_CSP_TEST/*Description:根据输入的多个工单流水号,更新对应的SERVICECLASSID值Author:姓名工号Date:YYYY-MM-DDVersion:版本Caller:调用者Callee:被调用者Comments:注释信息History:1.Date:修改日期
此文档下载收益归作者所有