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

プロシージャ内でDDLを実行するには、 'EXECUTE IMMEDIATE'を使う必要があります。質問をするときにはいつもどんなエラーが発生しているかを示してください。私は 'PLS-00103:シンボルを検出しました 'というエラーが発生したと思います。 – 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がお礼を言います。実行文には30文字の制限がありますので、 –

+0

「実行即時」には30文字の制限はありません。この[ドキュメント](https://docs.oracle.com/cd/B19306_01/appdev.102/b14261/dynamic.htm)を参照してください。 – Nitish

関連する問題