1

次のSQL*Plusスクリプト

WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT FAILURE

DECLARE
    EXIST_INDEXES BOOLEAN := FALSE;
BEGIN
    FOR INDEX IN (SELECT * FROM INDEXES)
    LOOP
        EXIST_INDEXES := TRUE;
        DBMS_OUTPUT.PUT_LINE(INDEX.SCHEMA || '.' || INDEX.NAME);
    END LOOP;

    IF EXIST_INDEXES THEN
        RAISE_APPLICATION_ERROR(-20000,'Before proceeding, it is recommended to drop the indexes listed above');
    END IF;
END;

-- Here go SQL statements that should be executed if no indexes were found

テーブル/ビューのINDEXESにエントリがある場合、この出力を生成します。

SCHEMA_1.INDEX_1
DECLARE
*
ERROR at line 1:
ORA-20000: Before proceeding, it is recommended to drop the indexes listed above
ORA-06512: at line 13

テーブル/ビューINDEXESにエントリがある場合、次の方法を実行します。

  • DECLAREおよび行*がスクリプト出力に表示されないようにします。
  • PL/SQLブロックの後のSQL文の実行をスキップします。
  • スクリプトはゼロ以外のコードを返しますか?
4

1 に答える 1

0

SQL*Plus のエラー出力をカスタマイズできるかどうかわかりません。ただし、DECLAREこれは標準であり、後でスクリプトを使用してこれをフィルタリングできます。

他の質問に関しては、エラーが発生した場合の SQL*Plus の動作はWHENEVER SQLERRORコマンドによって制御されます。あなたの場合、エラーの場合にエラーコードで終了したい場合は、スクリプトの最初に次のコマンドを入力します。

WHENEVER SQLERROR EXIT FAILURE ROLLBACK
于 2012-07-23T10:06:08.417 に答える