Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。

  1. DDL 和 DML

    Sql代码 收藏代码

    /*** DDL ***/

    begin

    EXECUTE IMMEDIATE 'drop table temp_1';

    EXECUTE IMMEDIATE 'create table temp_1(name varchar2(8))';

    end;

/*** DML ***/

declare

v_1 varchar2(8);

v_2 varchar2(10);

str varchar2(50);

begin

v_1:='测试人员';

v_2:='北京';

str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';

EXECUTE IMMEDIATE str USING v_1, v_2;

commit;

end;

  1. 返回单条结果

    Sql代码 收藏代码

    declare

    str varchar2(500);

    c_1 varchar2(10);

    r_1 test%rowtype;

    begin

    c_1:='测试人员';

    str:='select * from test where name=:c WHERE ROWNUM=1';

    execute immediate str into r_1 using c_1;

    DBMS_OUTPUT.PUT_LINE(R_1.NAME||R_1.ADDRESS);

    end ;

  2. 返回结果集

Sql代码 收藏代码

CREATE OR REPLACE package pkg_test as

/* 定义ref cursor类型

不加return类型,为弱类型,允许动态sql查询,

否则为强类型,无法使用动态sql查询;

*/

type myrctype is ref cursor;

--函数申明
function get(intID number) return myrctype;

end pkg_test;

/

CREATE OR REPLACE package body pkg_test as

--函数体

function get(intID number) return myrctype is

rc myrctype; --定义ref cursor变量

sqlstr varchar2(500);

begin

if intID=0 then

--静态测试,直接用select语句直接返回结果

open rc for select id,name,sex,address,postcode,birthday from

student;

else

--动态sql赋值,用:w_id来申明该变量从外部获得

sqlstr := 'select id,name,sex,address,postcode,birthday from student

where id=:w_id';

--动态测试,用sqlstr字符串返回结果,用using关键词传递参数

open rc for sqlstr using intid;

end if;

    return rc;
end get;

end pkg_test;

/

最新文章

  1. 打造高效前端工作环境-tmuxinator
  2. “#if 0/#if 1 ... #endif”的作用
  3. 四种方式实现SQLServer 分页查询
  4. Linux磁盘管理之磁盘结构、概念、原理01
  5. Loadrunner关联取参及设置检查点
  6. 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cookie 读写; 自定义 HttpFilter; 其他
  7. win7下安装tomcat
  8. EASYRECOVERY_3.3.29包含注册机、都教授数据恢复含注册码
  9. IT综合学习网站收集
  10. Exporter - 实现默认的导入方法用于模块
  11. 学习:Linux基础知识<一>
  12. 网狐6603 cocos2dx 棋牌、捕鱼、休闲类游戏《李逵捕鱼》手机端完整源码分析及分享
  13. php mysql实现栏目分类递归
  14. 浙江工商大学15年校赛C题 我删我删,删删删 【简单模拟】
  15. 基于visual Studio2013解决C语言竞赛题之1053洗牌
  16. linux 私房菜 CH7 Linux 档案与目录管理
  17. Maven SpringMVC整合Mybatis
  18. STM32——GPIO之从库函数到寄存器的前因后果
  19. Software Engineering-HW1
  20. 带着萌新看springboot源码13(手写一个自己的starter)

热门文章

  1. android selector(转)
  2. Android系列之Fragment(四)----ListFragment的使用
  3. 这些天自身努力的体会,关于java方面的
  4. LABJS使用教程
  5. Apache httpd + tomcat 简单集群
  6. chrome下float元素下input选中内容bug
  7. .vimrc & .bashrc 文件配置
  8. codevs4203山区建小学
  9. 快捷查看dll的PublicKeyToken
  10. Android4.2.2由于越来越多的物理按键(frameworks)
  11. Office 365开发概述及生态环境介绍(二)
  12. 使用.Net Core+EF7 完成CodeFirst
  13. Python函数二(函数名,闭包,迭代器)之杵臼之交
  14. iview render input每输入一个字符就会自动跳出焦点
  15. Java基础学习-标识符
  16. C++进程间通信的十一种方法
  17. hadoop的hdfs中的javaAPI操作
  18. day25-python操作redis一
  19. 静态路由、Track与NQA联动配置举例
  20. FTPserver