0

I have following Store procedure in Oracle 11g. I am passing the table name as parameter through ASP.net using c#. But while running the application i am getting the error "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;

So anybody have a solution please let me know ASAP. Thanks in Advance

4

2 回答 2

0

您的DELETE陈述中有三个错误:

  1. date_add()Oracle中没有函数(有关可用函数列表,请参阅手册
  2. curdate()Oracle中没有函数(有关可用函数列表,请参阅手册
  3. 子查询是完全没有必要的。另外:aselect需要一个from子句。

把它们放在一起,你的删除应该是这样的:

stmt := 'DELETE FROM '|| itableName ||' WHERE CREATEDATE < sysdate - interval ''1'' week'; 

(注意字符串文字中重复的单引号)。

请注意,Oracle 的DATE数据类型始终包含时间部分。因此sysdate - interval '1' week将一周前的日期返回为“当前时间”。如果您的意思是包括上周的完整天,则需要使用 trunc: 来“删除”时间部分trunc(sysdate) - interval '1' week

于 2014-08-14T09:45:20.697 回答
-1

您的内部查询将看起来像:-

SELECT DATE_ADD(CURDATE(), INTERVAL , - 1, WEEK) FROM DUAL;

所以请纠正您的查询。

于 2014-08-14T09:38:24.907 回答