發表文章

目前顯示的是 5月, 2015的文章

[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