私は、ORA-00918が呼び出されると期待しているが、オラクルでは奇妙な動作に遭遇しましたが、そうではありません。たとえば、このクエリを実行します。Oracleは、この問合せに対して「ORA-00918:列があいまいに定義されました」をなぜ呼び出さないのですか?
SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
このクエリは、概念的無効のトリガーを持つテーブルの詳細を探しているが、これは私が解決しようとしている問題ではないことに注意してくださいされています。この問題は、この問合せ、データ・ディクショナリ、ビューまたは表に固有の問題ではありません。限り、私はそれがテーブルやビュー(私が試した2つまたは3つから)の任意のセットに適用されると言うことができる限り。
とにかく、このクエリを実行しようとUSER_TABLES
とUSER_TRIGGERS
両方がそうWHERE
句を実行するためのクエリがTRG.STATUS
に変更する必要が取得するためにSTATUS
という列を持っているので、あなたは、ORA-00918を取得します。 [OK]をクール、代わりに別のテーブルに参加しようとします。
SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
JOIN USER_CONSTRAINTS CON ON CON.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
この問合せは、どのSTATUS列を修飾するかを問わず、魔法のように機能します。セマンティクスやクエリーが返すものは気にしないでください。エラーはありません。 USER_CONSTRAINTS
にはSTATUS
という列もありますので、2つの列を選択するときにどうしたらよいかわからないのですが、それはもっと曖昧です。
ところで、これはすべて10.2.0.3.0です。つまり、ORA-00918は、クエリに2つ以上のテーブルがある場合に発生しなくなります。これがOracleバグの場合は、誰が修正されたかを知っていますか?データベースがアップグレードされているとカウボーイのクエリが爆発する可能性が高いOracleバージョンはありますか?バグを実証するためのBQへ
更新
おかげで11.2.0.1.0に固定されています。それ以前のバージョンで修正されたことを示すことができる人のための賞金!
確かに、2番目のクエリで 'distinct status'を選択し、' select distinct tab.status'で別の結果を得ることができます。 – Benoit
私は同じ動作9.2.0.8.0と10.2.0.4.0を参照してください –
私は以前この問題で悩まされてきました。他のテーブルへの外部結合後にキー列にNULLが含まれていた理由を操作できませんでした。私は唯一ではないことを見て良かった!そしてそれが11gで修正されているのを見てうれしい。 –