ORACLE数据库错误- SQL错误[904] [42000]:ORA-00904:“ENTERS_ETA”:无效标识符

bz4sfanl  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(200)

我尝试在DBeaver中运行下面的SQL查询,但出现错误:
SQL错误[907] [42000]:ORA-00907:缺少右括号
错误位置行:24位:909
这个错误是在-

(EXTRACT (SECOND FROM a.service_date) AS servicedate_secs + a.eta) AS enterTS_eta, a.schdev,

字符串
查询的一部分:

SELECT
    (EXTRACT (SECOND FROM a.service_date)  + a.eta) AS enterTS_eta, 
    a.schdev,    -- ADD - enter timestamp AND ETA
    (CASE 
         WHEN enterTS_eta < a.schdev 
             THEN 'Schedule Deviation is more!'   -- Cases TO compare it WITH SchDev
         WHEN enterTS_eta > a.schdev 
             THEN 'Schedule Deviation is less!'
         ELSE 'Equal!'
     END) AS bus_log_info


我尝试了不同的解决方案

  • 删除括号
  • 删除AS子句

到目前为止没有任何工作。我不知道这部分有什么问题。在尝试了一些修复后,现在错误是-

SQL Error [904] [42000]: ORA-00904: "ENTERS_ETA": invalid identifier.

y1aodyip

y1aodyip1#

列表达式内部还有一个AS别名:

(EXTRACT (SECOND FROM a.service_date) AS servicedate_secs + a.eta) AS enterTS_eta,

字符串
删除它:

(EXTRACT (SECOND FROM a.service_date) + a.eta) AS enterTS_eta,


别名仅在列表达式的最后使用。
此外,您不需要在这个表达式周围使用外括号,也不需要在CASE表达式周围使用外括号,尽管它们不会造成任何损害。括号最好只在需要时使用。
下一个问题是您试图在同一查询块中使用派生列。你不能这么做该别名将仅在父查询块中可用。因此,使用两个查询块嵌套查询:

SELECT enterTS_eta,
       schdev,
       CASE 
             WHEN enterTS_eta < schdev 
                 THEN 'Schedule Deviation is more!'   -- Cases TO compare it WITH SchDev
             WHEN enterTS_eta > schdev 
                 THEN 'Schedule Deviation is less!'
             ELSE 'Equal!'
         END AS bus_log_info
   FROM (SELECT EXTRACT (SECOND FROM a.service_date)  + a.eta AS enterTS_eta, 
                a.schdev,    -- ADD - enter timestamp AND ETA
           FROM mytable a)

相关问题