プロが教えるわが家の防犯対策術!

質問です。

shellからSqlplus→ストアド呼び出しを行います。

まず、ソースをご覧下さい。

VARIABLEret NUMBER;
DECLARE
cnvtStatNUMBER;
BEGIN
cnvtStat := 0;

cnvtStat := PK_TEST.TEST(A);
IF ( cnvtStat >= 0 ) THEN
:ret := 0;
ELSE
:ret := 9;
END IF;
EXCEPTION
WHEN OTHERS THEN
:ret := 9;
END;

となっています。
困っていることは
ストアドのヘッダ部がコンパイルエラーの場合、
EXCEPTIONに引っかかってくれないのです。

本体のコンパイルエラーはEXCEPTIONに引っかかります。

このままでは、ヘッダがコンパイルエラーで
ストアド処理が行われないのに、
呼び出し側では気づかず処理を続行してしまいます。

どのようにエラーハンドリングすればよいのか
皆さんお手数かけますが、アドバイスよろしくお願いします。

A 回答 (1件)

どのようなエラーハンドリングを望んでいるのか、理解できませんが、



SQL*PLUSに流し込むスクリプトの先頭で

WHENEVER OSERROR EXIT 2
WHENEVER SQLERROR EXIT 1

という2行を書いておけば、大抵のエラーは、SQL*PLUSの終了コードで
SHELL側に引き渡されます。

当然ながら、スクリプトが無かったとかの場合だと、"WHENEVER ~"を食べないので
まともな処理は出来ませんが、スクリプトさえあれば、それなりだと思います。

この回答への補足

ありがとうございます。
早速試してみます。

補足日時:2005/02/01 09:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す