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:缺少表达式”

当我删除第二个外部连接时,它可以正常工作(也可以使用常规连接)。

能 帮我?

4

1 回答 1

0

在我看来,这实际上是一个 LEFT 外连接 - 在旧式 Oracle 语法中,(+) 放在连接的可选侧,而在 ANSI 语法中,需要的侧(左或右)在 JOIN 中被调用规范 - 有关示例,请参阅此 AskTom 参考。因此,扩展@FlorinGhita 的建议以使用 ANSI JOIN 语法(并对语句的其余部分进行一些假设),我们会得到类似

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 回答