execute immediate使用方法

1.常规用法:立刻执行sql语句:将需要执行的sql存入字符串,然后执行

 sql  varchar2(20);
 sql := ' UPDATE Person SET Name = 'tom' WHERE id=9527   ';
 execute immediate sql;

2.从动态语句检索值(INTO子句)

declare   
   l_cnt  varchar2(20);   
begin   
   execute immediate 'select count(1) from emp'   
     into l_cnt;   
   dbms_output.put_line(l_cnt);   
end; 

3.给动态语句传值(USING 子句)

使用标记 :1 :2 :3 代表第一个第二个第三个参数
    declare   
       sql1  varchar2(20) := 'test';   
       sql2  varchar2(10) := 'id';   
       begin   
       execute immediate 'insert into dept vals   (:1, :2, :3)'   
         using 9527, sql1, sql2;   
       commit;   
    end;

4.动态调用例程.例程中用到的绑定变量参数必须指定参数类型.黓认为IN类型,其它类型必须显式指定

declare   
   routin   varchar2(100) := 'gen2161.get_rowcnt';   
   name     varchar2(20) := 'emp';   
   cnt      number;   
   status   varchar2(200);   
begin   
   execute immediate 'begin ' || routin || '(:2, :3, :4); end;'   
   using in name, out cnt, in out status;   
  
   if status != 'OK' then   
      dbms_output.put_line('error');   
   end if;   
end;  

5.带参与赋值结合

INTO子句应该用在USING子句前

declare   
   dept     pls_integer := 20;   
   name     varchar2(20);   
   loc      varchar2(20);   
begin   
   execute immediate 'select dname, loc from dept where deptno = :1'   
     into name, loc   
     using dept ;   
end;

6.执行多行sql语句

    declare   
       l_sal  pls_integer := 2000;   
    begin   
       execute immediate 'insert into temp(empno, ename) '||'select empno, ename from emp '||'where sal > :1'   
         using l_sal;   
       commit;   
    end; 
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值