添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Oracle 动态SQL

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



1. DDL 和 DML




Sql代码 [转]ORACLE 动态执行SQL语句_sql


  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;


    2. 返回单条结果




    Sql代码 [转]ORACLE 动态执行SQL语句_sql


    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 ;

    11. 3. 返回结果集




      Sql代码 [转]ORACLE 动态执行SQL语句_sql


      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. /
      32. 上一篇: odoo开发笔记 -- 还原数据库后,异常:ir_attachment: IOError: [Errno 2] No such file or directory: u'/var/...'

        下一篇: 问题解决: Pandas and scikit-learn: KeyError: […] not in index