3

有人可以解释这里发生了什么吗?

在此处输入图像描述

两者都是同一个查询,在 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

4 回答 4

3

根据这个网站,

“您可以通过以连字符 (-) 结束交互式 SQL 来显式地继续该行。”

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

缺少减号。

于 2012-09-07T20:49:41.850 回答
3

看起来 SQL Developer 的解析器要求其-运算符后面的参数位于同一行。...所以这有效:

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

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

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

于 2012-09-07T20:44:51.327 回答
1

在 sqlplus 中,行尾的连字符充当行继续符。请参阅此处继续长线部分。可能 SQLDeveloper 正在做同样的事情。所以不要在行尾加连字符。

于 2012-09-07T20:49:42.450 回答
1

您还可以运行最后一个查询,而无需将减号放在新行上,只需在第一行末尾添加连字符即可。似乎 SQL Developer 具有解释长命令的 SQl*plus 方式
试试这个

SELECT (TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - -
       NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR')) a FROM dual
于 2012-09-07T20:51:03.037 回答