Oracle SQL 开发误区探索
本文内容摘自《剑破冰山——Oracle开发艺术》一书。
1、避免对列运算
要善于通过等价改写消除 SQL 中对列的运算,这样可以避免索引无法使用。
2、消除隐式转换
3、关注空格(避免粗心)
4、存储过程与权限
存储过程有编译和执行两个阶段,编译阶段,调用权限和定义权限是一样的,而执行阶段则不同。
5、提防 DDL 提交事务
DDL 语句会在当前 session 完成 commit 动作,即便这个 DDL 操作失败了也依然如此。事实上,DDL 语句执行的第一步就是 commit,然后才是执行 DDL 本身,无论命令本身是否执行成功,只要 DDL 关键字出现,系统就会提交。在存储过程中要避免因 DDL 出现而破坏了事务的原子性。
6、INSERT INTO 应列出全部字段
7、OR 条件(注意加括号)
8、SEQUENCE 中的 CACHE
刚创建的序列必须用 nextval 来获取初始值,否则会提示 ORA-08002。如果设置了序列的 cache 后执行"alter system flush shared_pool"清空内存,会导致被缓存的序列号丢失。重启数据库也会导致 cache 中的连续号被清空。实际应用中一般不会要求序列连续,可以通过 cache 提高插入速度,且 cache 不应太小,一般也不要超过 300 个,再多性能提升也不明显了。其实即便设置了 nocache,只要执行了 nextval(如插入失败)就会导致断号,所以 nocache 选项没什么用!
9、树形查询易错处
过滤条件最好在 start with 后面和 connect by 后面都写上,这样才能有效的避免重复展现记录(where 后面可以省略),熟练且正确的使用树形查询是非常有用的,将会给工作带来很大的方便。
10、小心保留字(V$RESERVED_WORDS,该视图出现的 keyword 都是关键字)
其中 reserved 为 'Y' 那些关键字(也就是 plsqldev 中默认会变粗那些关键字)是不能直接作为标识符使用的,除非用双引号包裹,但这会给查询带来不便。比较坑的关键字有 size、current_date 等。
11、函数索引陷阱
自定义函数使用函数索引,如果改变了函数代码则必须重建函数索引,否则 Oracle 将使用这个函数索引查询出错误的结果且不提示任何错误,这应该是 Oracle 的 BUG。
12、标量子查询
标量子查询只和外关联语句写法等价,与内关联语句可能不等价。
标量子查询要避免单行子查询返回多个行,可以返回 0 或 1 行,否则就会包 ORA-01427 错误。因此使用标量子查询的场合大多选择在两表关联皆为主键的场合,在特定场合,业务允许一对多关联并随机取一条时,我们需用 rownum=1 来限制返回行数。
本文链接:http://www.cnblogs.com/hanzongze/p/oracle-sql-mistakes.html
版权声明:本文为博客园博主 韩宗泽 原创,作者保留署名权!欢迎通过转载、演绎或其它传播方式来使用本文,但必须在明显位置给出作者署名和本文链接!个人博客,能力有限,若有不当之处,敬请批评指正,谢谢!
Oracle SQL 开发误区探索的更多相关文章
- Oracle SQL开发 之 Select语句完整的执行顺序
查询语句语法: Select 属性 From 表 Where 条件 Group by 分组条件 Having 分组选择条件 Order by 排序条件 1.from子句组装来自不同数据源的数据: 2. ...
- oracle sql 高级编程 历史笔记整理
20130909 周一 oracle sql 开发指南 第7章 高级查询 1.层次化查询select level,ttt.*,sys_connect_by_path(ttt.col1,',') fro ...
- Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较
参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...
- Oracle sql develpoer
Oracle SQL Developer是针对Oracle数据库的交互式开发环境(IDE) Oracle SQL Developer简化了Oracle数据库的开发和管理. SQL Develo ...
- 【转】oracle数据库开发的一些经验积累
1.不安装Oracle客户连接Oracle 8的方法 请将以下文件拷贝到运行文件所在目录 一.ODBC动态库 : ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc ...
- Tools - Oracle SQL Developer
Oracle SQL Developer Oracle公司出品的一个免费非开源的用以开发数据库应用程序的图形化工具. 可以浏览数据库对象.运行SQL语句和脚本.编辑和调试PL/SQL语句,也可以创建执 ...
- 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...
- 介绍几种大型的Oracle/SQL Server数据库免费版
我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...
- WIN7 64位配置Oracle SQL Developer工具
在使用Oracle SQL 的过程中,很多参考资料,辅导机构,各种书籍绝大多数都是使用PL/SQL进行讲解,但是问题是PL/SQL对WIN7 64位系统支持不好,网上有各种各样的配置教程,我尝试了很多 ...
随机推荐
- php中的问题整理
1.什么是 CSRF 攻击 ?XSS 攻击?如何防范? CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统.讲述基本原理:用户访问A网站登陆并生成了cookie,再访问B网站, ...
- vuex的getters处理数据
getters是用来处理state里的数据的 getters传递一个值state 例子: store.js import Vue from 'vue' import Vuex from 'vuex' ...
- BFS总结
能够用 BFS 解决的问题,一定不要用 DFS 去做! 因为用 Recursion 实现的 DFS 可能造成 StackOverflow! (NonRecursion 的 DFS 一来你不会写,二来面 ...
- gulp使用入门
介绍:Gulp 是基于node.js的一个前端自动化构建工具,可以使用它构建自动化工作流程(前端集成开发环境):不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成,大大 ...
- karaf 控制台 常用linux指令(1)
0,切换命令当前域名 -bash代码 *:feature 命令是由域名+命令名组成的,切换当前域名,比如切换到*:feature,那么再输入list,则执行的是feature:list,切换到*:bu ...
- 判断Array/Object
Object.prototype.isPrototypeOf() / Array.prototype.isPrototypeOf()if(typeof items === "object ...
- SSAS 内部错误:操作未能成功
错误 -1056964601 : 内部错误: 操作未能成功,已终止. HY0008 是数据源的问题,设置数据源的虚拟连接就可以了
- weblogic 与项目jar冲突解决方案 ITsm部署
部署时出现找不到类itims*****IMOType 时删除 2个fvsd-res-ws-1.0.ja,itims-fvsd-res-sync.jar jar包 里面的DeviceInfoPort ...
- 微信支付接口调用H5(C#)
H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付.主要用于触屏版的手机浏览器请求微信支付的场景.可以方便的从外部浏览器唤 ...
- linux下tomcat服务器的相关命令
一:Linux下tomcat服务的启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下的bin目录(cd usr/loca ...