0

例を参照してください:

ORA-00942: 表またはビューが存在しません : どの表またはビューについて話しているかを見つける方法

基本的に、このような場合、Oracle は次のような応答を返します: SQL エラー: ORA-00942: テーブルまたはビューが存在しません

Hibernate のような ORM lib を使用しているときに Oracle からのあいまいなエラー メッセージは、一生に一度の経験ではありません。Oracle が、存在しないテーブルまたはビューの名前を単純に言及しないのはなぜですか? 質問例に投稿されたすべての監査およびその他の複雑な「ソリューション」はなぜですか?

要するに、オラクルの一見お粗末なエラーフィードバックに対する合理的で技術的な説明はありますか?それとも、ほとんど「独占的な」人気ステータスのために、(オラクル側で)改善する動機が欠如している結果である可能性が高いですか? (それとも他? ORM 開発者や DB ベンダーとの調整不足?)

実際、これは他の競合する (特に OSS) DB がより良いフィードバックを提供するかどうかという疑問も生じますが、それは私にはよくわかりません。

4

2 に答える 2

3

このテーブル名の欠如は、おそらくコード知識の漏洩を防ぐのに役立つでしょう。典型的な例-Webアプリのコーディングが不適切で、このようなエラーがトップレベルに伝播してユーザーに表示された場合、悪意のある人物はそれを使用してサイトにSQLインジェクションを行ったり、その他の悪いことをしたりする可能性があります。

于 2010-10-03T19:33:15.000 に答える
1

「要するに、オラクルの一見貧弱なエラーフィードバックについての合理的で技術的な説明はありますか、それとも、ほぼ「独占的」な人気のステータスのために(オラクルの側で)改善する動機の欠如の結果である可能性が高いですか?」

オラクルは30年前にさかのぼる由緒あるテクノロジーであることを忘れないでください。巨大な現存するコードベースがあります。したがって、基本的な動作を変更すると、広範囲に影響が及ぶ可能性があります。

それを「合理的」または「技術的」な説明と見なすかどうかは、好みの問題です。

Oracleデータベースを使用する私たちのほとんどは、その癖に耐えることを学びました。たとえば、ORA-00942エラーの原因となるテーブルを明らかにするのは簡単なことです。

prompt Dropping non_existent_table

drop table non_existent_table
/

エレガントではありませんが、ターゲットスキーマの状態を知らないことはエレガントにはほど遠いです。実際、DROP TABLEステートメントを盲目的に発行することは、スキーマ管理への大失敗のアプローチです。

「これはまた、他の競合する(特にOSS)DBがより良いフィードバックを提供するかどうかという問題を提起します」

確かに、同等のMySQLエラーであるMySQLエラー:1146は、テーブルに名前を付けます。もちろん、Oracleは現在MySQLを所有しているため、競合するDBMSとしてのステータスについては議論の余地があります:)

于 2010-10-03T21:01:25.697 に答える