Oracle中的动态SQL

2014-11-24 18:48:45 · 作者: · 浏览: 0

  Oracle中动态SQL可以通过本地动态SQL来执行,也可以通过DBMS_SQL包来执行。下面就这两种情况分别进行说明:


  一、本地动态SQL


  本地动态SQL是使用EXECUTE IMMEDIATE语句来实现的。


  1、本地动态SQL执行DDL语句:


  需求:根据用户输入的表名及字段名等参数动态建表。


  以上是编译通过的存储过程代码。下面执行存储过程动态建表。


  到这里,就实现了我们的需求,使用本地动态SQL根据用户输入的表名及字段名、字段类型等参数来实现动态执行DDL语句。


  2、本地动态SQL执行DML语句。


  需求:将用户输入的值插入到上例中建好的dinya_test表中。


  执行存储过程,插入数据到测试表中。


  在上例中,本地动态SQL执行DML语句时使用了using子句,按顺序将输入的值绑定到变量,如果需要输出参数,可以在执行动态SQL的时候,使用RETURNING INTO 子句,如:


 二、使用DBMS_SQL包


  使用DBMS_SQL包实现动态SQL的步骤如下:
A、先将要执行的SQL语句或一个语句块放到一个字符串变量中。
B、使用DBMS_SQL包的parse过程来分析该字符串。
C、使用DBMS_SQL包的bind_variable过程来绑定变量。
D、使用DBMS_SQL包的execute函数来执行语句。


  1、使用DBMS_SQL包执行DDL语句


  需求:使用DBMS_SQL包根据用户输入的表名、字段名及字段类型建表。


  以上过程编译通过后,执行过程创建表结构: