闲扯OracleSQL语句解析步骤

Oracle还是比较常用的,于是我研究了一下Oracle SQL语句,在这里拿出来和大家分享一下,希望对大家有用。我们都知道在Oracle SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析。那么这两种解析有何不同之处呢?它们又分别是如何进行解析呢?Oracle内部解析的步骤又是如何进行的呢?下面我们就这些话题进行共同探讨。

创新互联公司主营潞州网站建设的网络公司,主营网站建设方案,成都App定制开发,潞州h5微信小程序定制开发搭建,潞州网站营销推广欢迎潞州等地区企业咨询

在Oracle中存在两种类型的SQL语句,一类为DDL语句,他们是从来不会共享使用的,也就是每次执行都需要进行硬解析。还有一类就是DML语句,他们会根据情况选择要么进行硬解析,要么进行软解析。在Oracle 8i OCP教材的023中1-12有说明SQL语句的解析步骤,当一条SQL语句从客户端进程传递到服务器端进程后,需要执行如下步骤:
◆在共享池中搜索 SQL语句的现有副本
◆验证 SQL 语句的语法是否准确
◆执行数据字典查找来验证表和列的定义
◆获取对象的分析锁以便在语句的分析过程中对象的定义不会改变
◆检查用户访问引用方案对象的权限
◆确定语句的最佳执行计划
◆将语句和执行计划载入共享的 SQL 区

这个先入为主的概念一直占据着我的脑海,我认为硬解析就是上面几个步骤。相对于硬解析,软解析的步骤就是上面第一步找到现有SQL语句的副本后,只需要验证用户是否有权限执行就是了,这样省略上面好几个步骤,相对硬解析来说性能开销就非常小了。即使是在论坛上和大家讨论时,我也一直坚持这个看法。直到前一天看了Tom的《Effective Oracle By Design》中关于语句处理的章节后,我才知道这个自己一直坚持的观点事实上是错误的。

事实上,在Oracle SQL语句的解析步骤如下:

1、 语法检测。判断一条Oracle SQL语句的语法是否符合SQL的规范,比如执行:SQL> selet * from emp;我们就可以看出由于Select关键字少了一个“c”,这条语句就无法通过语法检验的步骤了。

2、 语义检查。语法正确的SQL语句在解析的第二个步骤就是判断该SQL语句所访问的表及列是否准确?用户是否有权限访问或更改相应的表或列?比如如下语句:

 
 
 
  1. SQL> select * from emp;  
  2. select * from emp  
  3. *  
  4. ERROR at line 1:  
  5. ORA-00942: table or view does not exist 

由于查询用户没有可供访问的emp对象,因此该Oracle SQL语句无法通过语义检查。

【编辑推荐】

  1. Oracle SQL语句优化的相关技术分析
  2. Oracle SQL 内置函数大全
  3. ORACLE SQL性能优化 (上)
  4. ORACLE SQL性能优化 (下)
  5. Oracle SQL到DB2 SQL移植解决方案

分享题目:闲扯OracleSQL语句解析步骤
文章转载:http://www.mswzjz.cn/qtweb/news7/7907.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能