2017-08-08 156 views
0

oracle的新功能,在編寫程序時面臨編譯時錯誤,所以任何人都可以幫我糾正錯誤。程序拋出編譯時錯誤oracle

代碼段:

Create or replace Procedure prc_DropUselessTables(userID number:=0) 
as 
ncount number:=0; 
Begin 

Select count(*) from User_Tables where table_name='DummyTable'; 

if(ncount>0) then 

Drop table DummyTable;----Error Line 

end if; 

end prc_DropUselessTables; 

感謝

+0

我沒有錯誤,您的錯誤是什麼以及您如何執行它? – user7294900

+1

您需要使用'EXECUTE IMMEDIATE'在過程中運行DDL。當問一個問題時,總是顯示你正在得到什麼錯誤。我相信你有錯誤'PLS-00103:遇到符號'DROP'期待....' – Nitish

回答

0

的過程中,您不能直接運行DDL。您需要使用EXECUTE IMMEDIATE

CREATE OR REPLACE PROCEDURE prc_DropUselessTables (userID NUMBER := 0) 
AS 
    ncount NUMBER := 0; 
BEGIN 
    SELECT COUNT (*) 
    INTO NCOUNT 
    FROM User_Tables 
    WHERE table_name = 'DummyTable'; 

    IF (ncount > 0) 
    THEN 
     EXECUTE IMMEDIATE 'Drop table DummyTable'; 
    END IF; 
END prc_DropUselessTables; 
+0

感謝Nitish您的回覆,Execute語句對30個字符有限制,所以如何迎合? –

+0

'EXECUTE IMMEDIATE'沒有30個字符限制。看看這個[documentation](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/dynamic.htm) – Nitish