如何解决SQL命令意外结束错误,请提出建议?
在下面的代码中,'t'之后的最后一行出现“ SQL命令意外结束”错误,请帮助我解决该问题。
(SELECT NVL(TO_CHAR(j,'DD-Mon-YYYY'),'NIL')
FROM
(SELECT *
FROM abc A
WHERE A.j =
(SELECT MAX(VALUE_DATE)
FROM abc
WHERE k = A.k
AND j <=
(SELECT TODAY
FROM DATES
WHERE B ='S'))
AND k IN (:t))
WHERE k =A.l)EFF_DATE
解决方法
好吧,您发布的查询似乎不完整。那个领先的开放式支架在这里做什么?
使用CTE(使查询运行),看起来不错:
SQL> var t number
SQL> exec :t := 1;
PL/SQL procedure successfully completed.
SQL> WITH abc
2 AS (SELECT SYSDATE j,3 SYSDATE value_date,4 1 k,5 SYSDATE today,6 'S' b
7 FROM DUAL),8 dates AS (SELECT SYSDATE today,'S' b FROM DUAL)
9 SELECT NVL (TO_CHAR (j,'DD-Mon-YYYY'),'NIL')
10 FROM (SELECT *
11 FROM abc a
12 WHERE a.j = (SELECT MAX (value_date)
13 FROM abc
14 WHERE k = a.k
15 AND j <= (SELECT today
16 FROM dates
17 WHERE b = 'S'))
18 AND k IN ( :t));
NVL(TO_CHAR
-----------
19-Aug-2020
SQL>
如果您发布这样的内容将很有帮助-复制/粘贴您的SQL * Plus会话,这样我们就可以看到您确切地做了什么以及为什么Oracle会这样做。
添加其他条件后,看来您发布的整个查询实际上是EFF_DATE
列的来源。如果是这样的话(再次:您发布了不完整的代码;很难猜测您在做什么),那么您就不能那样使用它,因为A
表在该位置超出范围:>
SQL> WITH abc
2 AS (SELECT SYSDATE j,6 'S' b,7 1 l
8 FROM DUAL),9 dates AS (SELECT SYSDATE today,'S' b FROM DUAL)
10 SELECT (SELECT NVL (TO_CHAR (j,'NIL')
11 FROM (SELECT *
12 FROM abc A
13 WHERE A.j = (SELECT MAX (VALUE_DATE)
14 FROM abc
15 WHERE k = A.k
16 AND j <= (SELECT TODAY
17 FROM DATES
18 WHERE B = 'S'))
19 AND k IN ( :t))
20 WHERE k = A.l)
21 EFF_DATE
22 FROM DUAL;
WHERE k = A.l)
*
ERROR at line 20:
ORA-00904: "A"."L": invalid identifier
SQL>
但是,如果将其重写为
<snip>
10 SELECT (SELECT NVL (TO_CHAR (j,'NIL')
11 FROM (SELECT *
12 FROM abc A
13 WHERE A.j = (SELECT MAX (VALUE_DATE)
14 FROM abc
15 WHERE k = A.k
16 AND j <= (SELECT TODAY
17 FROM DATES
18 WHERE B = 'S'))
19 AND k IN ( :t)
20 AND k = A.l)) --> this
21 EFF_DATE
22 FROM DUAL;
EFF_DATE
-----------
19-Aug-2020
SQL>
查看是否有帮助。如果没有,请发布适当的测试用例(CREATE TABLE和INSERT INTO示例数据),以及所需的输出和从 input 到 output 的规则。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。