多行sql查询出错

时间:2012-09-07 20:30:44

标签: sql oracle oracle-sqldeveloper

有人能解释一下这里发生了什么吗?

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;

以上作品,但以下获胜 -

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

4 个答案:

答案 0 :(得分: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,这就是为什么这样做的原因]

答案 1 :(得分:3)

根据this网站,

  

“您可以通过结束它在交互式SQL中显式继续行   用连字符( - )。“

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

缺少减号。

答案 2 :(得分:1)

在sqlplus中,行末尾的连字符用作行继续符。请在此处查看Continuing a long line section。可能SQLDeveloper正在做同样的事情。所以不要在一行末尾加一个连字符。

答案 3 :(得分:1)

您还可以通过在第一行末尾添加连字符来运行最后一个查询而不将减号放在新行上。看起来SQL Developer有SQl * plus解释长命令的方式 试试这个

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