create or replace procedure proc_test(v_item in varchar2)
as
v_sql varchar2(2000):=''; --執行的sql
v_num number(9); --員工人數
v_dname varchar2(200); --部門名稱
begin
--execute immediate用法1:立即執行sql
v_sql:='select * from emp';
execute immediate v_sql;
dbms_output.put_line('execute immediate用法1執行成功!');
--execute immediate用法2:立刻執行sql語句,並賦值給某個變量
v_sql:='select count(*) from emp';
execute immediate v_sql into v_num;
dbms_output.put_line('execute immediate用法2執行成功!員工總數:'||v_num);
--execute immediate用法3:立刻執行sql語句,並賦值給某個變量
v_sql:='select dname from dept where deptno = :1 ';
execute immediate v_sql into v_dname using v_item ;
dbms_output.put_line('execute immediate用法3執行成功!'||v_item||'部門名稱爲:'||v_dname);
--異常處理
exception
when OTHERS then
begin
dbms_output.put_line('sqlcode:'||sqlcode);
dbms_output.put_line('sqlerror:'||SUBSTR(SQLERRM, 1, 200));
dbms_output.put_line('error in line:'||DBMS_UTILITY.format_error_backtrace);
end;
end proc_test;
在scott用戶中創建上面存儲過程:
執行存儲過程:
begin
proc_test('20');
end;
/
結果:
execute immediate用法1執行成功!
execute immediate用法2執行成功!員工總數:14
execute immediate用法3執行成功!20部門名稱爲:RESEARCH