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位系统支持不好,网上有各种各样的配置教程,我尝试了很多 ...
随机推荐
- JS中的同步和异步
javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread.start就可以开辟一个线程,所以,javascript就像一条流水线,仅仅是一条流水线而已,要 ...
- SpringBoot_配置文件
Properties配置 SpringBoot中采用了大量的自动化配置,但是对开发者而言,在实际项目中不可避免会有一些需要自己手动配置,承载这些自定义配置的文件就是resources 目录下的appl ...
- sjms-3 结构型模式
结构型模式 适配器模式 内容:将一个类的接口转换成客户希望的另一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.两种实现方式:类适配器:使用多继承对象适配器:使用组合 角色 ...
- mycat跟踪分析
mycat版本1.6 192.168.5.66 从 192.168.5.67主 一个user表 验证主从 log4j2修改日志level为debug schema.xml配置 启动服务,打开日志tai ...
- drools规则引擎中易混淆语法分析_相互触发导致死循环分析
整理了下最近在项目中使用drools出现的问题,幸好都在开发与测试阶段解决了,未波及到prod. 首先看这样两条规则: /** * 规则1_set默认利率a */ rule "rate_de ...
- REdis命令处理流程处理分析
分析版本:REdis-5.0.4. REdis命令处理流程可分解成三个独立的流程(不包括复制和持久化): 1) 接受连接请求流程: 2) 接收请求数据和处理请求流程,在这个过程并不会发送处理结果给Cl ...
- 20145232韩文浩 《网络对抗技术》 Web安全基础实践
问题回答 SQL注入攻击原理?如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使 ...
- Connect To Ubuntu 16.04 / 17.10 / 18.04 Desktop Via Remote Desktop Connection (RDP) With Xrdp
[1] https://websiteforstudents.com/connect-to-ubuntu-16-04-17-10-18-04-desktop-via-remote-desktop-co ...
- oracle RAC
RAC安装步骤 1 配置共享存储 2 Grid Infrastructure软件的安装,GI主要用于cluster ,storage的管理 3 安装数据库软件 ...
- FPGA学习之旅
从大学就开始使用stm32,工作之后,仍然没有摆脱,从f1系列,到f4系列,然后又到L1系列,尽管可以满足工作需要,但还是希望可以摆脱束缚,尝试学习FPGA,希望能够遇到一个好机遇.