[Oracle]怎麼在Stored Procedure裡執行Truncate Table指令

因為Stored Procedure只允許執行DML(Data Manipulation Language)指令,如SELECT、INSERT,而Truncate Table指令屬於DDL(Data Definition Language)指令,如Create Table、Alter Table。

所以若直接在Stored Procedure裡下Truncate Table語法,會發生錯誤,

CREATE OR REPLACE PROCEDURE SP_ALEX_TEST AS 
BEGIN
  TRUNCATE TABLE tablename;
END SP_ALEX_TEST;
/

錯誤(3,12): PLS-00103: Encountered the symbol "TABLE" when expecting one of the following:     := . ( @ % ; The symbol ":= was inserted before "TABLE" to continue. 

所以必需改由下列方法來達到執行效果,

--<方法一>
execute immediate 'truncate table tablename';

--<方法二>
DBMS_UTILITY.EXEC_DDL_STATEMENT('TRUNCATE TABLE tablename;');


不過實測後,都可以compile,但只有<方法一>會刪除資料,而<方法二>雖有正常執行完成,但資料並未被刪除。


reference web:
http://stackoverflow.com/questions/625743/truncating-a-table-in-a-stored-procedure

留言

這個網誌中的熱門文章

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務

Oracle 例外控制(Exception Control)

Oracle 工作排程 DBMS_JOB 筆記