execute immediate 的用法

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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章