EXECUTE IMMEDIATE用法小解实例展示

/**
   *Author:ITelite.cn
   *date:2008-04-14
   *Target:take exercise for the dynastic
   *
*/


Declare
        v_table varchar2(20);
        v_sql Varchar2(100);
        Begin
             v_table:='hqf.testtable';
             v_sql:='select * from '||v_table;            
             dbms_output.put_line(v_table);
             dbms_output.put_line(v_sql);
           Execute Immediate v_sql;
        End; 

       
Declare
       v_sid Integer:=20020101;
       v_sql Varchar2(100);
       v_result Varchar2(50);      
Begin
     --v_sid:=12;
     v_sql:='Select loc into v_result from scott.dept d where d.deptno=:1  ';
    
     dbms_output.put_line(v_sql);
     --dbms_output.put_line(v_result);
     Execute Immediate v_sql
     Using 10 ;
     Commit;
 
End;




/*
--动态命令的实用参考一( select ..into)
--Execute immediate 命令在使用into关键字时与静态的plsql块中
--into关键字使用方法上的区别。

declare
v_result varchar2(20);
begin
execute immediate 'select dname from scott.dept d where d.deptno=:1' Into v_result   --:1这是一个绑定变量
Using 70;
commit;
dbms_output.put_line('结果为:'||v_result);
end;
--绑定变量,通俗的讲就是一个占位的参数,而后用using中的常量或着变量去找它的相应

Declare
v_result Varchar2(20);
Begin
     Select dname Into v_result From scott.dept d Where  d.deptno=10;
     dbms_output.put_line(v_result);
End;

declare
v_result varchar2(20);
begin
execute immediate 'select dname  from scott.dept d where d.deptno=:1' Into v_result
Using 70;
commit;
dbms_output.put_line('结果为:'||v_result);
end;

*/



/*
--动态命令的实用参考一( insert ..into)
--
Begin
     Execute Immediate 'insert into scott.dept values (:1,:2,:3) '
     Using 70,'IT','Beijing';
     Commit;
End;


declare
   l_depnam varchar2(20) := 'testing';
   l_loc     varchar2(10) := 'Dubai';
   begin
   execute immediate 'insert into scott.dept values   (:1, :2, :3)'
     using 60, l_depnam, l_loc;
   commit;
end;

*/


/*

---尽享动态执行sql的execute immediate的命令使用的魅力。
--对比静态的测试,和动态测试。
Declare
v_result Varchar2(20);
Begin
v_result:=mypackage.myfun1(10);
dbms_output.put_line(v_result);
mypackage.mypro1(20020101,v_result);
dbms_output.put_line(v_result);

End;
--Select * From student s Where s.student_id=20020101;
---Select * From testtable Where recordnumber=10;


Declare
v_result Varchar2(20);
Begin
     --动态执行函数
     Execute Immediate 'begin :1:=mypackage.myfun1(:2); end;'
     Using Out v_result,In 10;
     Commit;
     dbms_output.put_line(v_result);
    
     --动态执行存储过程
     Execute Immediate 'begin mypro1(:1,:2); end;'
     Using  In 20020101,Out v_result;
     Commit;
     dbms_output.put_line(v_result);
End;

*/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值