Oracle のエラー メッセージの解釈で問題が発生したことはありません。その理由の 1 つは、SQL for Oracle を開発するために私が見た対話型ツールはどれも、クエリが間違っていた場所を指摘してくれるからです。これには、他の人が指摘したように、SQL*Plus と Perl DBI モジュールが含まれます。
$ exec_sql.pl 'select * from daul'
DBD::Oracle::db prepare failed: ORA-00942: table or view does not exist (DBD ERROR: error possibly near <*> indicator at char 14 in 'select * from <*>daul') [for Statement "select * from daul"] at exec_sql.pl line 68.
うーん、一行にまとめてあるのでちょっと読みづらいです。しかし、GUI ツールは、Oracle がクエリで問題を起こし始めたトークンを指すことができます。パーサーで少し作業を行うと、問題のあるテーブルを選択するツールを作成できます。
根本的な質問に答えるために、Oracle エラーは期待どおりに動作するように設計されていないようです。私が知る限り、Oracle のエラー メッセージはいずれも変数テキストをサポートしていません。代わりに、Oracle は、エラー番号とエラーが発生した場所の 2 ビットの情報を返します。適切なツールがあれば、これらのデータでエラーを診断するのは非常に簡単です。オラクルのシステムは、エラーに応じてさまざまな量の診断データを提供するシステムよりも、ツールの作成者に適していると言えます。問題のある場所を強調するために、Oracle のすべてのエラー メッセージ (将来のエラーを含む) 用のカスタム パーサーを作成する必要があると想像してください。
テーブル名を含めると誤解を招く場合があります。どこで問題が発生したかを知るだけでも、非常に役立ちます。
SQL> select * from where dummy = 'X';
select * from where dummy = 'X'
*
ERROR at line 1:
ORA-00903: invalid table name
オラクルがこのような方法を選択した理由については、次のような推測があります。
IBM はこのスタイルのエラー メッセージを System R に使用し、Larry Ellison、Bob Miner、Ed Oates はこれをコピーして Oracle V2 を構築しました。(下位互換性。)
エラー番号と場所は、診断情報を可能な限り小さく表現したものです。(倹約。)
上で示したように、Oracle に接続するツールの作成を簡素化するためです。(相互運用性。)
いずれにせよ、どのテーブルが存在しないかを把握するのに DBA である必要はないと思います。適切なツールを使用するだけです。(そして、あなたの期待を調整してください。)