SQL语句的执行过程

 

每种类型的语句都需要如下阶段:

· 第1: Create a Cursor 创建游标

· 第2: Parse the Statement 分析语句

      SQL从用户进程载入到Oracle'shared pool

      if( hash_value(Sql_Statement) in hash_table == true )

      (

        soft_parse;

      ) else (

        hard_parse;

      )

      soft_parse:主要是为了验证用户是否有权限run this sql.

      hard_parse:

        1.语法分析

        2.语义分析

        3.通过数据字典验证对象和列等信息

        4.同义词转换(如果存在)

        5.用户权限验证

        6.根据优化器,生成执行计划

        7.载入library cache

        (分析过程中要用到dictionary cache中的信息,如查阅用户权限等)

      if (Sql_Statement == 'SELECT') call3,4

· 第5: Bind Any Variables 绑定变量

      if(Sql_Statement == 'Parallelize') call6

· 第7: Run the Statement 运行语句

      if (Sql_Statement == 'SELECT') call8

· 第9: Close the Cursor 关闭游标

 

如果使用了并行功能,还会包含下面这个阶段:

· 第6: Parallelize the Statement 并行执行语句

 

如果是查询语句,则需要以下几个额外的步骤,如图 3所示:

· 第3: Describe Results of a Query 描述查询的结果集

· 第4: Define Output of a Query 定义查询的输出数据

· 第8: Fetch Rows of a Query 取查询出来的行,fetch 的数据放入databuffer

 (如果在databuffer中不存在)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值