本文转自: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. 认识基本的mfc控件

    几乎可以在每个windows程序中都看到按钮.复选框.文本框以及下拉列表等等,这些都是控件.而且很多常用的控件已经内置到操作系统当中了,在Visual C++中,这些常用控件已经简答到能用“拖放”这种 ...

  2. Atitit.Atiposter 发帖机 信息发布器 v7 q516

    Atitit.Atiposter 发帖机 信息发布器 v7 q516 V7 jetty 版本 基本访问改为web版. 这样发布调试 V1  初步实现sina csdn cnblogs V2  实现qz ...

  3. SharePoint 2013 Designer 自定义操作菜单

    众所周知,我们在SharePoint的二次开发中,经常会添加ECB菜单或者Ribbon菜单,通常我们会采取Feature的方式去添加一个Xml,或者采取JavaScript的方式,当然,除此之外,还可 ...

  4. atitit.userService 用户系统设计 v4 q316 .doc

    atitit.userService 用户系统设计 v4 q316 .doc 1. 新特性1 2. Admin  login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> ...

  5. android 浅谈Aidl 通讯机制

    服务端: 首先是编写一个aidl文件,注意AIDL只支持方法,不能定义静态成员,并且方法也不能有类似public等的修饰符:AIDL运行方法有任何类型的参数和返回值,在java的类型中,以下的类型使用 ...

  6. Swift开发第八篇——方法嵌套&命名空间

    本篇分为两部分: 一.Swift中的方法嵌套 二.Swift中的命名空间 一.Swift中的方法嵌套 在 swift 中我们可以让方法嵌套方法,如: func appendQuery(var url: ...

  7. display:inline-block 去除间隙

    先写出代码 核心css代码: .sample0{display: inline-block;height: 40px;width: 40px;color: #ffffff;background-col ...

  8. apache 日志轮询 linux cronolog

    Linux下运行的Web服务器Apache,默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计.安装cronolog后,可以将日志文件按时间分割,易于管理和分析. cronolog安装配 ...

  9. SQL Server(五)——常用函数

    1.数学函数:操作一个数据,返回一个结果 --取上限ceiling select code,name,ceiling(price) from car ; --取下限 floor select floo ...

  10. JavaScript(七)——视频插入

    代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...