本文转自:http://zhaisx.iteye.com/blog/856472

Oracle 动态SQL
Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。试验步骤如下:

1. DDL 和 DML

  1. /*** DDL ***/
  2. begin
  3. EXECUTE IMMEDIATE 'drop table temp_1';
  4. EXECUTE IMMEDIATE 'create table temp_1(name varchar2(8))';
  5. end;
  6. /*** DML ***/
  7. declare
  8. v_1 varchar2(8);
  9. v_2 varchar2(10);
  10. str varchar2(50);
  11. begin
  12. v_1:='测试人员';
  13. v_2:='北京';
  14. str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';
  15. EXECUTE IMMEDIATE str USING v_1, v_2;
  16. commit;
  17. end;

2. 返回单条结果

  1. declare
  2. str varchar2(500);
  3. c_1 varchar2(10);
  4. r_1 test%rowtype;
  5. begin
  6. c_1:='测试人员';
  7. str:='select * from test where name=:c WHERE ROWNUM=1';
  8. execute immediate str into r_1 using c_1;
  9. DBMS_OUTPUT.PUT_LINE(R_1.NAME||R_1.ADDRESS);
  10. end ;

3. 返回结果集

    1. CREATE OR REPLACE package pkg_test as
    2. /* 定义ref cursor类型
    3. 不加return类型,为弱类型,允许动态sql查询,
    4. 否则为强类型,无法使用动态sql查询;
    5. */
    6. type myrctype is ref cursor;
    7. --函数申明
    8. function get(intID number) return myrctype;
    9. end pkg_test;
    10. /
    11. CREATE OR REPLACE package body pkg_test as
    12. --函数体
    13. function get(intID number) return myrctype is
    14. rc myrctype; --定义ref cursor变量
    15. sqlstr varchar2(500);
    16. begin
    17. if intID=0 then
    18. --静态测试,直接用select语句直接返回结果
    19. open rc for select id,name,sex,address,postcode,birthday from
    20. student;
    21. else
    22. --动态sql赋值,用:w_id来申明该变量从外部获得
    23. sqlstr := 'select id,name,sex,address,postcode,birthday from student
    24. where id=:w_id';
    25. --动态测试,用sqlstr字符串返回结果,用using关键词传递参数
    26. open rc for sqlstr using intid;
    27. end if;
    28. return rc;
    29. end get;
    30. end pkg_test;
    31. /

[转]ORACLE 动态执行SQL语句的更多相关文章

  1. ORACLE 动态执行SQL语句

    本文转自 http://zhaisx.iteye.com/blog/856472 Oracle 动态SQL Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immedia ...

  2. 使用exec和sp_executesql动态执行SQL语句(转载)

    当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,个人觉得用得比较多的地方就是分页存储过程和执行搜索查询的SQL语句.一个比较通用的分页存储过程,可能需要传入表名, ...

  3. 第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGIN ; THEN ; ELSEIF ...

  4. 动态执行SQL语句,接收返回值

    一.exec和sp_executesql介绍 当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句.比如,一个比较通用的分页存储过程,可能需要传入表名,字段,过滤条件, ...

  5. ORACLE 查询不走索引的原因分析,解决办法通过强制索引或动态执行SQL语句提高查询速度

    (一)索引失效的原因分析: <>或者单独的>,<,(有时会用到,有时不会) 有时间范围查询:oracle 时间条件值范围越大就不走索引 like "%_" ...

  6. sp_executesql动态执行sql语句并将结果赋值给一变量

    需求场景: 需动态拼接sql语句进行执行,并将执行的结果赋值给一指定变量. 样例代码如下: SELECT @tableName = TAB_NAME FROM dbo.NMR_BLYWBDY WHER ...

  7. 动态执行SQL语句

    在实际制作过程中,需要动态的拼接SQL语句然后执行.具体代码如下: declare @columnName varchar(20),@tempName varchar(20) select @temp ...

  8. 自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

  9. Oracle批量执行SQL语句

    SQLServer的场合,用";"分割SQL语句即可正常执行. Oracle的场合,会报ORA-00911错误.Oracle中需要加上begin end才正确. Dim Sql A ...

随机推荐

  1. [js开源组件开发]localStorage-cache本地存储的缓存管理

    localStorage-cache本地存储的缓存管理 距离上次的组件开发有近三个月的时间了,最近一直在做一些杂事,无法静下心来写写代码,也是在学习emberjs,在emberjs中有一个很重要的东西 ...

  2. go语言常用函数:cap

    cap()函数返回的是数组切片分配的空间大小.//http://www.cnblogs.com/osfipin/. package main import "fmt" func m ...

  3. Nessus常见问题整理

    个别问题感谢大学霸__IT达人在Kali中文网的解答. 问题1: Kali自带Nessus产品注册失败 报Error(500):Activation failed  出现这个错误原因很多.其中有一个原 ...

  4. Eclipse CDT Linux下内存分析 补记

    常用工具汇总 http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 常用的内存分析工具 http://en.wikipedia.org/wi ...

  5. Android Animation学习(六) View Animation介绍

    Android Animation学习(六) View Animation介绍 View Animation View animation系统可以用来执行View上的Tween animation和F ...

  6. Android 查看手机中所有进程

    真机测试的时候发现DDMS对进程的显示很不给力,一些进程管理工具又不显示包名. 所以就自己写了一个小程序,查看自己手机中的进程,显示当前时间和进程的包名: 程序运行截图: 布局: <Linear ...

  7. Android 异步Http框架简介和实现原理

    在前几篇文章中<Android 采用get方式提交数据到服务器><Android 采用post方式提交数据到服务器><Android 采用HttpClient提交数据到服 ...

  8. Android ListViewview入门

    接着上文<Android 数据库的事务>,往person数据表中插入50条数据 public void testAdd() throws Exception { PersonDao dao ...

  9. android 界面设计基本知识

    一个好的APP不仅有美观,好看的界面,更需要良好的性能和稳定性.作为一名开发人员,需要理解界面设计原则并写出优秀的界面设计代码. 本章主要讲述基本控件的使用,界面布局及一些常用的界面设计属性. 1.常 ...

  10. Caliburn.Micro 关闭父窗体打开子窗体

    比如我们在做登录的时候需要关闭父窗体打开子窗体.使用Caliburn.Micro它的时候我们关闭登录窗口的时候主页面也会关闭. 解决方法就是在登录页面的CS里面写 IndexView iv = new ...