0

SQL クエリで少し (少なくともそうなることを願っています) 問題が発生しました。これが私の参加です

WHERE obj.mod_type = 'SER'
   and obj.wrk_id=wrk_lang.id(+)
   and extractvalue(value(shm),'/*/@xmi:id','xmlns:xmi="http://www.omg.org/XMI"') = extractvalue(value(shm_con),'/*/@source')(+)

「ORA-00936:式がありません」というメッセージが表示されます

2番目の外部結合を削除すると、正常に機能します(通常の結合でも)。

することができます。助けて?

4

1 に答える 1

0

これは実際には左外部結合のように見えます。古いスタイルのOracle構文では、(+)は結合のオプション側に配置され、ANSI構文では必須側(LEFTまたはRIGHT)がJOINで呼び出されます。仕様-例については、このAskTomリファレンスを参照してください。したがって、ANSI JOIN構文を使用するという@FlorinGhitaの推奨事項を拡張すると(そして、ステートメントの残りの部分について少し仮定すると)、次のようになります。

SELECT *
  FROM OBJ
  LEFT OUTER JOIN WRK_LANG
    ON (obj.wrk_id = wrk_lang.id and
        extractvalue(value(obj.shm),'/*/@xmi:id','xmlns:xmi="http://www.omg.org/XMI"') = 
          extractvalue(value(wrk_lang.shm_con),'/*/@source')
  WHERE obj.mod_type = 'SER';

共有してお楽しみください。

于 2012-10-10T11:48:50.390 に答える