当前位置:首页 > 开发 > 数据库 > 正文

常用的PL/SQL开发原则

发表于: 2013-03-29   作者:sunjing   来源:转载   浏览次数:
摘要: a) 广泛使用绑定变量,特别是批量绑定,因为这可以有效的避免sql的硬解析和PL/SQL引擎和SQL引擎的上下文切换b) 广泛使用UROWID来处理DML语句c) 在你的存储过程中谨慎使用DDL语句,因为这可能会破坏你的transaction的连续性,更为严重的是可能会阻塞DML操作并可能会导致大量library cache latch争用并且有可能会导致某些sql执

a) 广泛使用绑定变量,特别是批量绑定,因为这可以有效的避免sql的硬解析和PL/SQL引擎和SQL引擎的上下文切换
b) 广泛使用UROWID来处理DML语句
c) 在你的存储过程中谨慎使用DDL语句,因为这可能会破坏你的transaction的连续性,更为严重的是可能会阻塞DML操作并可能会导致大量library cache latch争用并且有可能会导致某些sql执行计划的改变。

library cache请参考:

http://blog.sina.com.cn/s/blog_656184530101262t.html

http://prefectliu.blog.163.com/blog/static/236308182010116111911183/
d) 不要在存储过程里不应该commit的地方commit,特别是当你的存储过程会被另外一个存储过程调用的时候,这么做会破坏父存储过程transaction的连续性。
e) 注意你面对的数据量,小数据量的处理方法和海量数据的处理方法是不一样的
f) 循环的时候要注意清空临时变量的值
g) 注意“select into 变量”的问题,使用子begin语句封装“select into 变量”以避免可能会出现的错误,这样就可以避免要在“select into 变量”之前先执行一下select count(*)
h) 不要让oracle执行PL/SQL代码时产生隐式转换
i)  在PL/SQL中定义varchar2变量的时候当你在不知道你所定义的变量的长度的时候可以将其定义为varchar2(4000),这一点都不浪费!
j)  如果你写的一组存储过程有逻辑上的关联,建议你把这些存储过程封装到一个package里
k) 改正你的PL/SQL代码里的所有编译时编译器提示出的warning
l)  循环的时候一定要注意exit
m) 处理显式cursor的时候一定要注意fetch和exit

n)  bulk collect into的时候不要一次collect太多的数据,建议一次collect的数据量在10000条以内,可以用批量绑定自带的limit子句来限制或者使用rownum来限制
o) 如果你使用了批量绑定,那为什么要把时间浪费在写诸如insert into tablename(column1,column2,……,column100) values(value1(i),value2(i),……,value100(i))这样的sql语句上面?如果有可能,就写一个你自己的存储过程代码生成器吧,让它来帮你生成这样的语句。你应该把精力集中在更有用的方面!
p)  你希望你的代码被并发执行吗?如果你不希望或者你的代码根本就不能够被并发执行,那就想一个办法控制并发吧!在应用层面控制就好,比如在update之前先尝试对该记录加for update nowait的锁,或者利用DML语句当前读的特性来避免并发都是不错的主意
q) 不要写诸如insert into tablename1 select * from tablename2这样的语句,你考虑到扩展性了吗?假如以后tablename1或者tablename2增加或减少字段了呢?

r)  谨慎使用hint,除非你很清楚你在做什么。比如说这里你强制oracle使用了某个索引,假如以后这个索引的名字被改了,由此带来的执行计划的变更你怎么办?你考虑到这种情况了吗?
s) 用好临时表,有时候临时表很有用,特别是在根据一堆复杂条件去更新海量数据的时候
t) 尽量避免在存储过程里使用递规!不是说不能用递规(递规在某些特定的情况下很有用),而是说在用递规的时候一定要避免无限递规的情况!
u) 写好PL/SQL代码里的注释

常用的PL/SQL开发原则

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
JDBC增删改查,以增为例 有张表pl_policys,字段很多 第一步,在PL/SQL中直接将表拖入到空白处,选
查看DB的版本: select * from v$version; ps:相关sql语句 select * from dba_users;--查看所有用户
工欲善其事必先利其器,pl/sql小技巧设置下面写下我一直用的一些设置,我的pl/sql版本是7.1.4(查看
(三)PL/SQL Procedure Language / SQL 存储过程 命名程序:存储过程,函数,触发器 ---------------
1.登录PL/SQL Developer 这里省略Oracle数据库和PL/SQL Developer的安装步骤,注意在安装PL/SQL Dev
1.PL/SQL 记录 简介:类似于高级语言中的结构,处理单行数据 可以使用记录自定义类型、记录变量、%Ro
使用PL/SQL 1、技术目标 理解 PL/SQL 功能和特点 了解数据类型及其用法 理解逻辑比较 理解控制结构
几个设置让UltraEdit更高效的使用PL/SQL(其他语言方法也是类似的) 1.PL/SQL的高亮 "%appdata%\IDMCo
几个设置让UltraEdit更高效的使用PL/SQL(其他语言方法也是类似的) 1.PL/SQL的高亮 "%appdata%\IDMCo
几个设置让UltraEdit更高效的使用PL/SQL(其他语言方法也是类似的) 1.PL/SQL的高亮 "%appdata%\IDMCo
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号