ORA-00923: 在 oracle 中未找到预期错误的 FROM 关键字
Posted
技术标签:
【中文标题】ORA-00923: 在 oracle 中未找到预期错误的 FROM 关键字【英文标题】:ORA-00923: FROM keyword not found where expected error in oracle 【发布时间】:2014-08-14 09:17:14 【问题描述】:我在 Oracle 11g 中有以下存储过程。我使用 c# 通过 ASP.net 将表名作为参数传递。但是在运行应用程序时,我收到错误“ORA-00923: FROM keyword not found where expected error in oracle”。
PROCEDURE "ARCHIVE_FILTERDATA" ( ITYPE IN VARCHAR2, itableName IN VARCHAR2, cur_archive OUT sys_refcursor ) AS
stmt clob;
endstmt clob;
BEGIN
IF ITYPE='Week'
THEN stmt := 'DELETE FROM '|| itableName ||' WHERE CREATEDATE < (SELECT DATE_ADD(CURDATE(), INTERVAL , - 1, WEEK))';
EXECUTE IMMEDIATE stmt;
END IF;
END;
所以任何人有解决方案请尽快让我知道。提前致谢
【问题讨论】:
你的内部 SELECT 必须有 FROM 另外,Oracle 中既没有date_add()
也没有 curdate()
函数
【参考方案1】:
您的DELETE
语句中有三个错误:
-
Oracle 中没有
date_add()
函数 (See the manual for a list of available functions)
Oracle 中没有curdate()
函数 (See the manual for a list of available functions)
子查询完全没有必要。另外:select
需要 from
子句。
把它们放在一起,你的删除应该是这样的:
stmt := 'DELETE FROM '|| itableName ||' WHERE CREATEDATE < sysdate - interval ''1'' week';
(注意字符串文字中重复的单引号)。
请注意,Oracle 的DATE
数据类型总是 包含时间部分。所以sysdate - interval '1' week
将返回一周前的日期为“当前时间”。如果您的意思是包括上周的完整天,则需要使用 trunc:trunc(sysdate) - interval '1' week
“删除”时间部分。
【讨论】:
【参考方案2】:你的内部查询看起来很像:-
SELECT DATE_ADD(CURDATE(), INTERVAL , - 1, WEEK) FROM DUAL;
所以请更正您的查询。
【讨论】:
Oracle 中既没有date_add
也没有curdate()
函数。以上是关于ORA-00923: 在 oracle 中未找到预期错误的 FROM 关键字的主要内容,如果未能解决你的问题,请参考以下文章
求高手,oracle一直报这个错误:ORA--00923 无法在应该出现from关键字的位置上找到它,如何解决
jmeter3.1连接数据库报错,ORA-00923: 未找到要求的 FROM 关键字
在 Oracle SQL 中使用 CTE(ORA-00923:在预期的地方找不到 FROM 关键字)
我将如何修复这些“ORA-00933:SQL 命令未正确结束”“ORA-00923:未在预期位置找到 FROM 关键字”错误?