2012-09-07 80 views
3

有人能解釋發生了什麼嗎?錯誤多行SQL查詢

enter image description here

兩者都是相同的查詢,多線在SQL Developer中唯一的區別和單線。

的查詢 -

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual; 

上述作品,但低於won't-

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - 
       NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual; 

回答

3

它看起來像SQL Developer的解析器需要論證其-操作後,在同一線。 ......所以此工程:

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') 
- NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a 
FROM dual; 

所以問題不是每本身多行,而是需要有在同一行作爲它的操作數的運算符(-)。爲什麼呢?我會說一個錯誤,或只是一個次優的實現。

[編輯:正如其他人指出的那樣,連字符是默認line continuation character,這就是爲什麼以這種方式工作]

+0

哇!這幾乎感覺像一個魔法。 :P但這很奇怪。你給出的答案只適用於'-'運算符,其他所有類似'+'或乘法'*',除法'/',工作正常 – Annjawn

+0

這是因爲'-'字符用於行的末尾明確地繼續下一行。所以,當你用'-'結束這行時,它被用作延續,所以你需要用'-'開始以下行,才能正確運行。 – Saggio

+0

@ user564636我明白,在它的'SQL> SQL Plus中的限制條款'提示,但shoudn't像SQL開發一種先進的IDE克服這種不正常現象? – Annjawn

3

this網站,

「你可以明確地繼續行交互式SQL通過用連字符( - )結束它 「。

您可以在截圖EXECUTING看到:SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') NUMTO ...

減號丟失。

1

在sqlplus,在該行的末端連字符用作續行字符。請參閱Continuing a long line section。可能SQLDeveloper也在做同樣的事情。所以不要在連線末尾加一個連字符。

+0

我認爲SQL Plus中有這個功能,但沒有一個先進的IDE像SQL開發人員。 – Annjawn

1

也可以在不通過簡單地在第一行的末尾添加連字符把減去一個新的生產線運行的最後查詢。它看起來像SQL開發人員已經在SQL *解釋長命令
加方式試試這個

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - - 
     NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual 
+0

這太奇怪了! '--'是評論是不是,它有效:) – Annjawn

+0

@Annjawn'--'(中間沒有空格)用於評論。尼古拉斯的例子在他們之間有一個空間。 – Saggio

+0

@ user564636即使您不在兩者之間添加空間,它也能正常工作。 – Annjawn