2017-08-08 153 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