ORA-00923: 使用 shell 脚本在预期的地方找不到 FROM 关键字

Posted

技术标签:

【中文标题】ORA-00923: 使用 shell 脚本在预期的地方找不到 FROM 关键字【英文标题】:ORA-00923: FROM keyword not found where expected using shell script 【发布时间】:2013-12-04 14:44:52 【问题描述】:

关于这个错误的帖子太多了。但是我无法解析我的代码。我试图在 shell 脚本中运行这个 SQl,但它给了我这个错误。 ORA-00923: 在预期的地方找不到 FROM 关键字

SELECT
  wrk.WO_ID,
  srq.CSDL_SEQ_NO,
  srq.ASDL_CMD,
  srq.HOST_CLLI                                    AS NEP,
  MIN(srq.START_DTS)                               AS start_dt,
  MAX(srq.COMP_DTS)                                AS comp_dt,
  ((MAX(srq.COMP_DTS)-MIN(srq.START_DTS)) * 86400) AS proc_time
FROM
  SARMPRD1.TBL_ASDL_LOG srq,
  sarmprd1.tbl_wrk_ord wrk
WHERE
  srq.srq_id      = wrk.srq_id
AND srq.start_dts > TRUNC(sysdate) + 7.5/24
AND wrk.WO_STAT   = '104'
GROUP BY
  wrk.WO_ID,
  srq.SRQ_ID,
  srq.ASDL_UNID,
  srq.CSDL_SEQ_NO,
  srq.ASDL_CMD,
  HOST_CLLI
ORDER BY
  proc_time DESC;

谁能帮我看看问题出在哪里?

【问题讨论】:

SQL 本身看起来不错,我会说转义会有问题。这是一个独立文件还是实际上在 shell 脚本中?如果是,请同时粘贴周围的 shell 代码。 这里是完整的代码.. 从 sys.dual 中选择 'WO_ID、SEQ_NO、ASDL、NE、START_TIME、COMP_DT、PROC_TIME'; SELECT wrk.WO_ID||','||srq.CSDL_SEQ_NO||','||srq.ASDL_CMD||','||srq.HOST_CLLI As NEP||','||min(srq.START_DTS) as start_dt||','||max(srq.COMP_DTS) as comp_dt||','||((max(srq.COMP_DTS)-min(srq.START_DTS)) * 86400) as proc_time FROM SARMPRD1.TBL_ASDL_LOG srq, sarmprd1.tbl_wrk_ord wrk where srq.srq_id = wrk.srq_id and srq.start_dts > trunc(sysdate) + 7.5/24 and wrk.WO_STAT = '104' group by wrk.WO_ID, srq.SRQ_ID, srq.ASDL_UNID, srq.CSDL_SEQ_NO , srq.ASDL_CMD,HOST_CLLI order by proc_time desc;脱线 【参考方案1】:

问题在于连接运算符。由于您连接了所有列,因此您不能使用“AS NEP”、“AS START_DT”等。删除它们,它会正常工作,请记住,您实际上只输出一列,因此多个别名不起作用。

有关有用的替代方法,请参阅this thread。

【讨论】:

【参考方案2】:

您有语法错误,使用连接运算符...

这是你的原件:

select 'WO_ID, SEQ_NO, ASDL,NE, START_TIME, COMP_DT, PROC_TIME' from sys.dual; 
SELECT wrk.WO_ID||','||srq.CSDL_SEQ_NO||','||srq.ASDL_CMD||','||srq.HOST_CLLI As NEP||','||min(srq.START_DTS) as start_dt||','||max(srq.COMP_DTS) as comp_dt||','||((max(srq.COMP_DTS)-min(srq.START_DTS)) * 86400) as proc_time FROM SARMPRD1.TBL_ASDL_LOG srq, sarmprd1.tbl_wrk_ord wrk where srq.srq_id = wrk.srq_id and srq.start_dts > trunc(sysdate) + 7.5/24 and wrk.WO_STAT = '104' group by wrk.WO_ID, srq.SRQ_ID, srq.ASDL_UNID, srq.CSDL_SEQ_NO, srq.ASDL_CMD,HOST_CLLI order by proc_time desc

试试这个:

select 'WO_ID, SEQ_NO, ASDL,NE, START_TIME, COMP_DT, PROC_TIME' from sys.dual; 
SELECT wrk.WO_ID||','||srq.CSDL_SEQ_NO||','||srq.ASDL_CMD||','||srq.HOST_CLLI As NEP||','||min(srq.START_DTS) as start_dt,
    max(srq.COMP_DTS) as comp_dt,
    ((max(srq.COMP_DTS)-min(srq.START_DTS)) * 86400) as proc_time 
FROM SARMPRD1.TBL_ASDL_LOG srq, sarmprd1.tbl_wrk_ord wrk 
where srq.srq_id = wrk.srq_id 
  and srq.start_dts > trunc(sysdate) + 7.5/24 
  and wrk.WO_STAT = '104' 
group by wrk.WO_ID, srq.SRQ_ID, srq.ASDL_UNID, srq.CSDL_SEQ_NO, srq.ASDL_CMD,HOST_CLLI 
order by proc_time desc

【讨论】:

【参考方案3】:

我没有看到您的问题的解决方案,但这里有一个建议:

创建一个新脚本,其中仅包含原始脚本中的一些项目。运行它,看看它是否有效。如果是这样,请添加更多代码并验证其是否有效。继续这样做,直到失败。然后应该很容易确定问题线。

【讨论】:

以上是关于ORA-00923: 使用 shell 脚本在预期的地方找不到 FROM 关键字的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00923: 在 oracle 中未找到预期错误的 FROM 关键字

错误:ORA-00923:在预期的地方找不到 FROM 关键字

在 Oracle SQL 中使用 CTE(ORA-00923:在预期的地方找不到 FROM 关键字)

ORA-00923 错误:在预期的地方找不到 FROM 关键字

我将如何修复这些“ORA-00933:SQL 命令未正确结束”“ORA-00923:未在预期位置找到 FROM 关键字”错误?

编写 CASE 语句错误 ORA-00923