出现以下错误:
ora-00933 sql 命令未正确结束”错误 Oracle DELETE with JOIN 和 WHERE SQL 语句。
我尝试根据 INNER JOIN 中的第一个条件和 WHERE 中的第二个条件有条件地从 Oracle DB 表 XEDOCS_LB 中删除记录,如下所示:
DELETE FROM XEDOCS_LB
INNER JOIN (SELECT ID
FROM XEFOLDERS_LB
WHERE TRANS_TYPE = '80'
AND TO_DATE(TRUNC(DATEOFUPDATE))
BETWEEN TO_DATE(SUBSTR('1220430',2,6),'YYMMDD')
AND TO_DATE(SUBSTR('1231231',2,6),'YYMMDD')) XEFOLDERS
ON EFOLDERID = XEFOLDERS.ID
WHERE TO_DATE(TRUNC(DATEOFUPDATE)) <= TO_DATE(SUBSTR('1230518',2,6),'YYMMDD')
这在 Oracle 中是无效语法。
delete from xedocs_lb a
where exists (select null
from xefolders_lb b
where b.trans_type = '80'
and to_date(trunc(b.dateofupdate))
between to_date(substr('1220430',2,6),'YYMMDD')
and to_date(substr('1231231',2,6),'YYMMDD')
and b.efolderid = a.id
)
and to_date(trunc(dateofupdate)) <= to_date(substr('1230518',2,6),'YYMMDD');
另一方面,也许你可以通过以下方式让它变得更简单
to_date
调用 dateofupdate
列 if 其数据类型为 DATE
- 可能是,根据 trunc
以及稍后与日期值的比较to_date(substr(...))
一段代码 - 你为什么要使用它,如果例如1231231
是硬编码字符串,所以您要从中提取日期?使用 date
文字(或具有适当格式模型的 to_date
函数)所以:
delete from xedocs_lb a
where exists (select null
from xefolders_lb b
where b.trans_type = '80'
and trunc(b.dateofupdate) between date '2022-04-30' and date '2023-12-31'
and b.efolderid = a.id
)
and trunc(dateofupdate) <= date '2023-05-18';