2015-12-30 62 views
0

所以,我已經通過了一個代碼,我試圖在SQL Developer中執行,但我得到一個「缺少右括號」的錯誤。試圖找出連接的語法

這是代碼:

(SELECT A.ID_STAGE ID_INT_STAGE 
    FROM STAGE_D A, 
    (SELECT STAGE_LINK_B.ID_STAGE, STAGE_LINK_B.ID_PRIOR_STAGE 
    FROM STAGE_LINK_B 
    CONNECT BY PRIOR STAGE_LINK_B.ID_STAGE = STAGE_LINK_B.ID_PRIOR_STAGE 
    START WITH STAGE_LINK_B.ID_STAGE = V$[STAGE_D.ID_STAGE] 
    )B 
WHERE A.ID_STAGE = B.ID_PRIOR_STAGE 
AND A.CD_STAGE = 'INT' 
) STG 
WHERE INT_F.ID_INT_STAGE = STG.ID_INT_STAGE 
AND INT_F.IND_CURR_ROW = 'Y'; 

我一直在試圖之前閱讀了關於連接,但它似乎是一個錯誤是在語法。

任何幫助表示讚賞!

謝謝!

+0

你的括號不正確。即使您刪除了「CONNECT BY」,您已經傳遞的查詢也不起作用。在我看來,你似乎缺少頂級查詢中的一些數據。什麼是'INF_F'應該指向什麼? –

+0

子查詢應該只有一對括號,即只有一對括號。 –

+0

@ConsiderMe我們在這裏有3個表格,STAGE_D,INT_F和STAGE_LINK_B,我試圖讓這個SQL工作,所以我可以在別的地方實現它,就像我說的,我從來沒有用過之前的連接,所以一些幫助讚賞....它試圖完成的是循環通過ID_STAGE從STAGE_D其中ID_STAGE = STAGE_LINK_B.ID_PRIOR_STAGE,直到STAGE_D.CD_STAGE ='INT' –

回答

0

這是一個不完整的命令。要是你把它歸結爲基本組成部分成功的話是:

(<Complex_table_definition>) STG 
WHERE <Conditions> 

基本上不會SELECT,除了爲STG定義的一部分。

+0

它告訴我錯誤是第7行中「缺少右括號」......我不知道V $ ...部分在做什麼 –

+0

行號可以是在我的經驗中有點有趣 - 首先刪除空白,這會影響行號;我不相信「第7行」的字面意思是屏幕上顯示的第7行代碼。我不明白爲什麼它會給出具體的錯誤,但我確實看到了一個會導致* some *錯誤的大問題。 – EvilBob22

+0

另一件事:'START WITH'可能需要在'CONNECT BY'之前出現。 Oracle可能會將它看作一個沒有START WITH的'CONNECT BY',然後是一個「額外的」'START WITH'作爲新的子句的開始,而沒有在它之前的右括號...... – EvilBob22

1

我相信你的直接問題是V$[STAGE_D.ID_STAGE]。從語法上來說,究竟應該如何是不明確的。我不認爲方括號在這裏以任何方式有效,並且它們的存在可能導致解析器感到困惑並拋出這個不太清晰的錯誤消息。我能夠使用類似的語法重現相同的錯誤。

我不知道該怎麼建議你應該改變它,因爲我真的不知道該表達意味着什麼。 Oracle中的「V $」通常是包含有關內部數據庫狀態動態信息(例如,V $ SESSION是顯示當前連接的數據庫會話的視圖)的表或視圖名稱的開頭。但似乎很明顯,這不是你在這裏尋找的。

鑑於它在START WITH子句中使用,這可能是一個表達式,用於返回將用於查找第一條記錄的某個值。但在Oracle環境下它並沒有意義。也許給你這個代碼的人從其他一些上下文中運行它,在將查詢傳遞給Oracle之前對這個表達式進行評估。