2012-10-10 74 views
0

我得到了一點(至少我希望如此)與SQL查詢的問題。這是我加入extractValue和右外連接 - Oracle 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:缺少表達式」

當我刪除第二個外連接正常工作(也與常規連接)。

可以smb。幫我?

+3

可能你應該寫'value(shm_con(+))'。但使用ANSI JOIN會更好。 –

回答

0

它看起來對我來說,這其實是一個左外連接 - 在舊式的Oracle語法(+)被放在一起,而在ANSI語法需要側的可選側(左或RIGHT)在JOIN規範中被調用 - 有關示例,請參閱this AskTom reference。因此,擴大對@ 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'; 

分享和享受。

+0

Thx爲您提供幫助!我解決了嵌套集和ANSI加入的問題。 – FredM