概要
以下と同様の EXCEPTION ブロックを持つ Oracle プロシージャがあります。raise_application_error の出力を Microsoft Access に戻し、ユーザーに表示したいと考えています。この Oracle Procedure を呼び出すのは Microsoft Access です。
EXCEPTION
WHEN e_invalidids THEN
raise_application_error (-20001,'Invalid ids in Upload Table.');
WHEN e_missingdate THEN
raise_application_error (-20002,'Missing Date in Upload Table.');
WHEN OTHERS THEN
raise_application_error (-20000,'An error was encountered - ' || SQLCODE || ' -ERROR- ' || SQLERRM);
END;
リクエスト
Access 内でこのエラーを報告する方法があれば、正しい方向に向けたいと思います。
解決策がOracleプロシージャを関数に変えることである場合、誰かがそれを適切に行う方法に触れてほしい(つまり、例外をトラップしてから値を返す)
背景情報
Access データベースをフロント エンドとして使用して、Oracle データベースにデータをインポートするためのユーザーランド ツールを作成しています。データは Excel からインポートされ、クリーンアップされ、修正され、さまざまな検証チェックに対してテストされます。次に、Access は ADO を使用してデータを Oracle サーバー上のテーブルに書き込み、PL/SQL プロシージャを呼び出して処理します。
この手順では、いくつかの検証チェックが実行されます (一部は重複しており、一部は DB に固有です)。渡されると、各レコードが読み取られて解釈され、データベース内の正規化されたテーブルに入力されます。
Access で既に実行されている検証チェックの量を考慮すると、Oracle プロシージャからエラーが発生することはまったく期待していませんが、エラーが発生した場合は、エラーを Access に戻してユーザーに表示したいと考えています。
私が試したこと
このフォーラムと Google で検索しました。私が読んだことから- raise_application_error は呼び出し元のクライアントに出力を返します-しかし、OracleとAccessの間にOLE DBプロバイダーとADO DB APIがあることを考えると、エラーがカプセル化されており、単純な成功/失敗が返されていると推測していますExecute 呼び出しから:
oraConn.Execute "import_data"
oraErrText = ""
Set oraErrors = oraConn.Errors
For Each oraError In oraErrors
debug.print oraError.Number
debug.print oraError.Description
debug.print oraError.Source
debug.print oraError.SQLState
debug.print oraError.NativeError
Next
上記の結果、単一のエラーが発生します: ORA-00900: 無効な SQL ステートメント