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 关键字”错误?