Oracle 8i SQL 命令未正确结束

Posted

技术标签:

【中文标题】Oracle 8i SQL 命令未正确结束【英文标题】:Oracle 8i SQL command not properly ended 【发布时间】:2016-06-17 14:34:31 【问题描述】:

在下面的 SQL 语句中,我传递 ROUTER_ID 并期望返回最新版本的 RTR_HEADER 记录以及相关的 RTR_SEQUENCE。

SELECT 
   RH.ROUTER_ID,
   RH.DESCRIPTION,
   RSEQ.SEQUENCE_NUMBER
FROM 
   CFG.RTR_SEQUENCE RSEQ
INNER JOIN CFG.RTR_HEADER RH
  ON RSEQ.ROUTER_ID = RH.ROUTER_ID
  AND RSEQ.ROUTER_REV = RH.ROUTER_REV
WHERE 
  RH.ROUTER_REV = (SELECT MAX(RVER.ROUTER_REV) FROM CFG.RTR_HEADER RVER WHERE RVER.ROUTER_ID = RH.ROUTER_ID) 
AND RH.ROUTER_ID = 'XXXXX-XXX'
ORDER BY RH.ROUTER_ID, RSEQ.SEQUENCE_NUMBER

我不断收到 SQL 命令未正确结束,智能指向 INNER JOIN。如果我省略了 INNER JOIN 及其相关的表和字段,SQL 语句就会运行。我确实得到了 RTR_HEADER 记录的最新版本,但我也需要匹配的 RTR_HEADER。我在这里查看了许多其他关于 SO 的现有答案,考虑了他们的解决方案,但没有任何结果。

【问题讨论】:

语法看起来不错。我假设 ROUTER_ID 是字符串而不是数字。 正确。一个字符串值。 您确定您不在 8i 中或正在检查 8i 的语法。用逗号替换内连接,并将 ON 后的条件移到 where 子句中。 您确定 Oracle 9 支持 JOIN 运算符吗?我认为 Oracle 10 中添加了对此的支持,但我可能弄错了? *哎哟!它的甲骨文 8i。对不起。既然是 8i,那么命令应该如何构造? 【参考方案1】:
SELECT 
   RH.ROUTER_ID,
   RH.DESCRIPTION,
   RSEQ.SEQUENCE_NUMBER
FROM 
   CFG.RTR_SEQUENCE RSEQ,CFG.RTR_HEADER RH
WHERE RSEQ.ROUTER_ID = RH.ROUTER_ID
  AND RSEQ.ROUTER_REV = RH.ROUTER_REV
  AND RH.ROUTER_REV = (SELECT MAX(RVER.ROUTER_REV) FROM CFG.RTR_HEADER RVER WHERE RVER.ROUTER_ID = RH.ROUTER_ID) 
AND RH.ROUTER_ID = 'XXXXX-XXX'
ORDER BY RH.ROUTER_ID, RSEQ.SEQUENCE_NUMBER

【讨论】:

@GeovaniMartinez 有关左右旧语法,请参见此处asktom.oracle.com/pls/asktom/…

以上是关于Oracle 8i SQL 命令未正确结束的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Live SQL:SQL 命令未正确结束

SQL 命令未正确结束 oracle 10g 功能

oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?

oracle mybatis一次执行多条sql,提示SQL命令未正确结束

如何解决 ORA-00933:SQL 命令未在 oracle 中正确结束?

mybatis 批量插入时报错:ORACLE ORA-00933: SQL 命令未正确结束