oracle存儲過程中如何執行動態SQL語句

 

有時需要在oracle存儲過程中執行動態SQL語句 ,例如表名是動態的,或字段是動態的,或查詢命令是動態的,可用下面的方法:

set serveroutput on
declare
n number;
sql_stmt varchar2(50);
t varchar2(20);
begin
execute immediate 'alter session set nls_date_format=''YYYYMMDD''';
t := 't_' || sysdate;
sql_stmt := 'select count(*) from ' || t;
execute immediate sql_stmt into n;
dbms_output.put_line('The number of rows of ' || t || ' is ' || n);
end;

如果動態SQL語句 很長很複雜,則可用包裝.

CREATE OR REPLACE PACKAGE test_pkg
IS
TYPE cur_typ IS REF CURSOR;
PROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ);
END;
/

CREATE OR REPLACE PACKAGE BODY test_pkg
IS
PROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ)
IS
    sqlstr VARCHAR2(2000);
BEGIN
    sqlstr := 'SELECT * FROM '||v_table;
    OPEN t_cur FOR sqlstr;
END;
END;
/

在oracle中批量導入,導出和刪除表名以某些字符開頭的表

spool   c:/a.sql  
      select   'drop table ' || tname || ';' from tab where tname   like   'T%';  
      spool   off  
   
    @c:/a

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