oracle中execute immediate的使用及序列号及表变量的使用(附示例下载)
- 格式:pdf
- 大小:104.57 KB
- 文档页数:6
文档出自:无忧学IT网http://www.51xit.com
Oracle racle 中中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;
用法实例:
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关键字使用方法上的区别。 文档出自:无忧学IT网http://www.51xit.com
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; 文档出自:无忧学IT网http://www.51xit.com
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() || ' 文档出自:无忧学IT网http://www.51xit.com
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://www.51xit.com/www/2010-09-16/5272.html
oracle中execute immediate的使用的使用
文章分类文章分类::数据库
EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马
上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性
能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之
以前它相当轻易编码.尽管DBMS_SQL仍然可用,
但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。
使用技巧
1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交
假如通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交
或者作为EXECUTE IMMEDIATE自己的一部分. 假如通过EXECUTE IMMEDIATE处理
DDL命令,它提交所有以前改变的数据
2. 不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)
或者用REF cursors.
3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号.
4. 在Oracle手册中,未具体覆盖这些功能。下面的例子展示了所有用到
Execute immediate的可能方面.希望能给你带来方便.
5. 对于Forms开发者,当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此
功能.
EXECUTE IMMEDIATE用法例子
1. 在PL/SQL运行DDL语句
begin
execute immediate 'set role all';
end;
2. 给动态语句传值(USING 子句)
declare
l_depnam varchar2(20) := 'testing';
l_locvarchar2(10) := 'Dubai';