7

これは、Oracle 11g リリース 1 からリリース 2 にアップグレードした後に見つかりました。

私が今要約できる最善のことはLEFT OUTER JOIN、一定の「偽の」列とWHERE句を含むクエリに対して、2つのOracle RELEASEで異なる結果が生成されるということです。リリース 2 では、「偽」列が一致しない行に表示されます。

TEST1      TEST2
=====      =====
A B        A B 
- ---      - ---
1 bar      1 hello
2 baz

> SELECT * FROM test1 LEFT OUTER JOIN test2 ON test1.a = test2.a;
  A B   A_1 B_1
  - --- --- -----
  1 bar   1 hello
  2 baz   

ここまでは順調ですね。上記のすべては、Rel で同じように機能します。1 と 2. ここで、「偽の」定数列 X を追加すると、期待どおりに動作します。

> SELECT * 
    FROM test1 
    LEFT OUTER JOIN (SELECT test2.*, 'X' AS X 
                       FROM test2) test3 
      ON test1.a = test3.a;

  A B   A_1 B_1   X
  - --- --- ----- -
  1 bar   1 hello X
  2 baz 

WHERE次に、最初のテーブルに句を追加して、異なる結果を取得します。

> SELECT * 
    FROM test1 
    LEFT OUTER JOIN (SELECT test2.*, 'X' AS X 
                       FROM  test2) test3 
      ON test1.a = test3.a
   WHERE test1.b LIKE 'ba%';

  Release 11.1.0.7.0        Release 11.2.0.2.0    
  ==================        ==================
  A B   A_1 B_1   X         A B   A_1 B_1   X
  - --- --- ----- -         - --- --- ----- -
  1 bar   1 hello X         1 bar   1 hello X
  2 baz                     2 baz           X  <--- WHAT'S THIS?!

さらに困惑: WHERE 条件が数値の場合 (たとえば、WHERE test1.a < 5結果は同じです!

更新 (私の実際の質問を明確にするため): 私は何を間違っていますか? 私の最終的なクエリは、何らかの形で未定義の動作を呼び出して、Oracle がリリースごとに返される内容を変更しても問題ないのでしょうか? そうでない場合、これは Oracle のバグですか?

4

2 に答える 2

0

そこで、私自身の質問に答えます。つまり、「私は何か間違ったことをしていますか、それともこれは Oracle のバグですか?」ということです。これはOracle のバグです。

support.oracle.comとして知られる狂気をナビゲートするのはあなたに任せますが、@AdamHawkes が指摘したように、このバグはおそらく最近の Oracle パッチ セットで対処されています。11.2.0.3 のリリース ノートにあるいくつかのバグは、私の問題と似ているように見えますが、まったく同じではありません。

最新のパッチを適用したら、ここに戻って回答を更新しようとします(私はこれを制御できない環境にいます)。

于 2012-07-09T18:22:52.517 に答える
0

他の読者のためにいくつかの関連記事にリンクするだけです..

https://forums.oracle.com/forums/thread.jspa?threadID=1113096

Oracle での完全外部結合の奇妙な動作 - どのように説明できますか?

主に、セッションを変更して特定の最適化をオフにすることを提案します。セッション セットの変更 "_optimizer_join_elimination_enabled" = false; alter session set "_optimizer_native_full_outer_join"=off;

単純なことが機能することを証明し、そもそもこれらのバグを導入するだけでなく、自動化されたテストがあればいいのにと思います。

于 2012-10-23T11:22:16.177 に答える