--原生動態sql
/**
declare
l_sal pls_integer := 2000;
l_addr varchar2(20):= 'emp1';
begin
execute immediate 'delete from '||l_addr||' where addr is null';
commit;
end;
--using在動態sql中的應用
declare
l_sal pls_integer := 5000;
begin
execute immediate 'insert into emp1(name,did)'||
' select name,did from emp1 where sar>:1'
using l_sal;
commit;
end;
--into在動態sql中的應用
declare
my_val varchar2(20);
begin
execute immediate 'select count(*) from emp1'
into my_val;
dbms_output.put_line('zhi'||my_val);
commit;
end;
--使用動態sql調用游標
declare
type cur is ref cursor;
my_cur cur;
l_sal pls_integer := 2000;
my_sql varchar2(200);
type e_type is record(
t_name varchar2(20),
t_sar number(6),
t_did number(6),
t_avgsar number(6)
);
emp_type e_type;
begin
my_sql:='select name,sar,did,avg(sar) over(partition by did order by sar) from emp1 where sar>'||l_sal;
open my_cur for my_sql;
fetch my_cur into emp_type;
while my_cur%found loop
dbms_output.put_line(emp_type.t_name||' '||emp_type.t_sar||' '||emp_type.t_did||' '||emp_type.t_avgsar);
fetch my_cur into emp_type;
exit when my_cur%notfound;
end loop;
commit;
end;
**/
--存儲過程的調用
declare
my_name varchar2(20);
my_name2 varchar2(20);
begin
my_name:='name1';
my_name2:='name2';
execute immediate 'begin prc(:1,:2);end;'
using in my_name, in out my_name2;
dbms_output.put_line('返回值:'||my_name2);
end;