码迷,mamicode.com
首页 > 数据库 > 详细

oracle中execute immediate的使用(select/insert/update/delete)(转)

时间:2015-09-19 19:32:10      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:

 

execute immediate的语法如下:

execute immediate sql;
execute immediate sql_select into var_1, var_2;
execute immediate sql using [in|out|in out] bind_var_1, [in|out|in out] bind_var_2;
execute immediate sql_select into var_1, var_2 using [in|out|in out] bind_var_1, [in|out|in out] bind_var_2;
execute immediate sql returning into var_1;
execute immediate sql bulk collect into indexed_var;

 

 

--动态命令的实用参考一( 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;


--动态执行update语句实例:
create or replace function f_testweekday
return integer
is
v_sql varchar(2000);
i_sendcount integer;
begin
--_‘ || f_getweekday() || ‘
v_sql := update t_push_smstemp_inform set sendcount=sendcount+1 returning sendcount into :1;

execute immediate v_sql using out i_sendcount;

return 0;
exception
when others then
rollback;
return 0;
end f_testweekday;

 

http://blog.csdn.net/tanshi/article/details/7083964

 

oracle中execute immediate的使用(select/insert/update/delete)(转)

标签:

原文地址:http://www.cnblogs.com/softidea/p/4821948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!