oracle动态sql以及绑定变量

原创 2008年10月02日 17:01:00
        实现动态SQL有两种方式:DBMS_SQL和本地动态SQL(EXECUTE IMMEIDATE) 。
oracle从8代开始就提供了新的执行动态sql的功能:execute immeidate v_sql using *** into ***;
本地动态SQL
  EXECUTE IMMEDIATE ‘语句’
  [INTO {变量1, 变量2, … 变量N | 记录体}]
  [USING [IN | OUT | IN OUT] 绑定变量1, … 绑定变量N]
  [{RETURNING | RETURN} INTO 输出1 [, …, 输出N]…];
  注意本地动态SQL仅支持弱类型REF CURSOR,即对于REF CURSOR,不支持BULK COLLECT.
动态SQL的使用:1、执行dml语句,在pl/sql中不能直接执行dml语句;2、执行的语句是在程序执行前不可估计的,就比如在运行时该sql才会被按照不同的条件进行拼接等。
该方法引用动态SQL的最大缺憾就是返回的结果集最多只能有一行,即使是ref cursor也只能包含一行的结果集。但是可以使用临时表的方法,把结果集存储起来,动态SQL执行完毕后再取数据就可以了。也就是说,这个动态SQL可以是一个块,里面的语句可以足够复杂,只要写作者认为自己有能力调试。
说到调试,也是动态SQL的一个很大的缺憾吧,在pl/sql中,一个varchar2的长度超过一定的大小后就自动转化为 long value,无法打印,无法查看,至少对于目前的我的能力,还没有找到方法,即使使用substr的方法来分解串再打印的方法都会失败。
绑定变量:动态SQL的形成一般使用的拼串和榜定变量两种方法,而普遍认为绑定变量有利于提高效率,其效率甚至与拼串的方式不可同日而语,这是可以理解的,绑定变量的使用,可以在多次执行sql时只使用一次语句分析、优化,而拼接则被认为是每次执行的sql都是不同的,每次执行都需要重新分析、优化,这往往是sql执行中最费时的操作。
动态sql高深莫测,如同指针一样,但为什么要使用那么晦涩的语法呢,除非不得已。

本文转自
http://hi.baidu.com/programcg/blog/item/7def5f02c3bcd20a4bfb515c.html

动态SQL中的重复占位符如何与绑定变量进行绑定

BEGIN calc_stats(:x, :x, :y, :x); END 是一个PL/SQL 代码段,而非 insert into t6 (a,b,c) values (:x,:y,:x) 这样的D...
  • rockpk008
  • rockpk008
  • 2014年05月09日 01:07
  • 1624

【PLSQL】绑定变量,动态SQL,硬解析和软解析

oracle利用内部hash算法来获得该sql的hash值,然后在library cache里查找是否存在该hash值; 假设存在,则将此sql与cache中的进行比较;假设“相同”,就将利用已有的...
  • u011538954
  • u011538954
  • 2015年03月12日 12:51
  • 1755

PHP使用SQL绑定变量

什么是SQL绑定变量?     百度百科的解释是:在sql语句的条件中使用变量而不是常量。比如shared pool里有两条sql语句:...
  • rilyu
  • rilyu
  • 2014年08月22日 12:21
  • 1570

【PLSQL】绑定变量,动态SQL,硬解析和软解析

oracle利用内部hash算法来获得该sql的hash值,然后在library cache里查找是否存在该hash值; 假设存在,则将此sql与cache中的进行比较;假设“相同”,就将利用已有的...
  • u011538954
  • u011538954
  • 2015年03月12日 12:51
  • 1755

动态SQL和绑定变量(转)

说动态SQL之前先来说下静态SQL   静态SQL语句   语句中主变量的个数与数据类型在预编译时都是确定的,我们称这类嵌入式SQL语句为静态SQL语句。   与之...
  • E01014165
  • E01014165
  • 2016年07月09日 09:23
  • 1370

动态sql,绑定变量和调优经验分析

为什么在PL/SQL里用动态SQL ? 有时SQL语句在编译的时候不能全部确定,动态SQL使你能够在运行时动态地构建SQL语句,从而创建更通用、灵活的应用程序。 何时用动态SQL? 1. 你想执...
  • ccedcj30
  • ccedcj30
  • 2013年05月11日 22:35
  • 469

游标变量、动态sql及变量绑定的使用

在oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析. 一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,...
  • xwnxwn
  • xwnxwn
  • 2015年10月04日 19:59
  • 391

游标变量、动态sql及变量绑定的使用

游标变量、动态sql及变量绑定的使用
  • a9529lty
  • a9529lty
  • 2011年01月19日 22:09
  • 8520

Oracle里面的using作用(用于动态sql绑定参数)

1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种: 其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类...
  • u012209894
  • u012209894
  • 2015年06月30日 15:04
  • 2247

动态SQL和静态SQL及绑定变量性能对比

动态SQL和静态SQL及绑定变量性能对比1、测试样例下面的三个存储过程,分别使用了动态SQL、绑定变量、静态SQL三种编程方式。具体存储过程内容如下:l)动态SQLcreate or replace ...
  • lqx0405
  • lqx0405
  • 2015年03月31日 12:03
  • 546
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle动态sql以及绑定变量
举报原因:
原因补充:

(最多只允许输入30个字)