2016-11-16 14 views
0

SQLとPL/SQLプロシージャを実行するAntスクリプトがあります。PL/SQLプロシージャを実行するためのAnt exec実行が失敗する

BEGIN 
    -- drop functions 
    FOR R IN (
     SELECT owner, object_name 
     FROM all_objects 
     WHERE owner='FCPOTP' 
     AND OBJECT_TYPE IN ('FUNCTION')) 
    LOOP 
     EXECUTE IMMEDIATE 'drop function '||R.owner||'.'||R.object_name; 
    END LOOP; 
    -- drop procedure 
    FOR R IN (
     SELECT owner, object_name 
     FROM all_objects 
     WHERE owner='FCPOTP' 
     AND OBJECT_TYPE IN ('PROCEDURE')) 
    LOOP 
     EXECUTE IMMEDIATE 'drop procedure '||R.owner||'.'||R.object_name; 
    END LOOP;  
END; 

がどのように私はすべてを実行するための同じexec sqlplus実行可能ファイルを使用することができます。

<exec executable="sqlplus" failonerror="true" >   
    <arg value="${user}/${password}@${DB}" /> 
    <arg value="@${scriptFilename}" /> 
</exec> 

上記のコードは、SQLスクリプトとパッケージではなく、のような手順を実行しますか?

+0

それはどのように「失敗」ん - あなたはどのようなエラーが出るのですか?それは実際に手続きの一部か、無名ブロックかです。 SQL \ * Plusを使って手動で実行するとどうなりますか? –

+0

@AlexPoole - エラーは発生していません。しかしブロックは実行されません。 [exec]接続先: [exec] Oracle Database 11g Enterprise Editionリリース11.2.0.4.0 - 64bitプロダクション [exec]パーティション化オプション付き [exec] [exec] 36 Oracle Database 11g Enterpriseとの接続が切断されました。 Editionリリース11.2.0.4.0 - 64ビットの生産 [EXEC]パーティショニングオプション で[エコー] =====終了===== [エコー] – useranon

+0

とても疑問でその出力を表示する方が良いだろう適切にフォーマットすることができます。しかし、私はそれの要点を得る。 –

答えて

2

エラーは発生せず、コメントの出力から実行中のブロックが表示されません。それはそうではないからです。 From the documentation

SQL * Plusは、入力したサブプログラムをSQLバッファに格納します。現在のサブプログラムをRUNまたはスラッシュ(/)コマンドで実行します。セミコロン(;)はPL/SQLサブプログラムの一部として処理され、コマンドは実行されません。

匿名ブロック(サブプログラム)は 'SQLバッファ'に入力されていますが、実行されることはありません。

あなたは自分の無名ブロックした後、あなたのスクリプトファイルに /を追加する必要があり

... 
    LOOP 
     EXECUTE IMMEDIATE 'drop procedure '||R.owner||'.'||R.object_name; 
    END LOOP;  
END; 
/
+0

追加後、/ theプロシージャは正常に実行されます。ありがとうございました。 – useranon

関連する問題