繁体   English   中英

多行sql查询出错

[英]Error in multi-line sql query

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

在此输入图像描述

两者都是相同的查询,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;

它看起来像SQL Developer的解析器需要论证其之后-运营商要在同一行。 ......所以这有效:

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

所以问题不是多行本身,而是需要将运算符( - )与其操作数放在同一行上。 为什么呢? 我要么说一个bug,要么只是一个次优的实现。

[编辑:正如其他人所说,连字符是默认的行继续符 ,这就是为什么这样工作的原因]

根据这个网站,

“你可以通过连字符( - )结束它,在交互式SQL中明确地继续一行。”

您可以在截图中看到EXECUTINGSELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') NUMTO ...

减号符号丢失。

在sqlplus中,行末尾的连字符用作行继续符。 请参阅此处的“ 延续长线”部分 可能SQLDeveloper正在做同样的事情。 所以不要在一行末尾加一个连字符。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM