早上好,我正在尝试运行以下脚本但是我收到“ORA-00933 SQL命令未正确结束”错误任何人都可以看到我出错的地方:
delete tableA
FROM tableA
JOIN tableB
ON tableB.usi = tableA.usi
WHERE tableB.usc = 'ABC'
AND tableA.cfs = '01.01.2013'
感谢您的期待!
答案 0 :(得分:2)
Oracle不支持DELETE语句的JOIN。您需要使用子查询
delete from tableA
where exists (select *
from tableb
where tableB.usi = tableA.usi
and tableB.usc = 'ABC'
AND tableA.cfs = '01.01.2013');
DELETE
语句的完整语法记录在手册中
https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_8005.htm#SQLRF01505
请注意,如果tableA.cfs
是DATE
(或TIMESTAMP
)列,则不应依赖隐式数据类型转换。 '01.01.2013'
是字符串文字而不是日期。 Oracle将尝试将其转换为日期,但这可能会失败,具体取决于SQL客户端的NLS设置。最好使用明确的ansi日期文字:where cfs = DATE '2013-01-01'
或使用to_date()
函数:where cfs = to_date('01.01.2013', 'dd.mm.yyyy')
。
此外,Oracle的DATE
列包含时间。因此,除非csf
列中的所有日期都有时间00:00:00
,否则该条件很可能与任何内容都不匹配。使用trunc(tablea.csf) = ...
来删除"更安全日期列的时间部分(它没有真正删除它,只是将其设置为00:00:00
)
答案 1 :(得分:0)
您可以尝试以下内容:
delete tableA
WHERE id IN (
SELECT a.id
FROM tableA a
JOIN tableB b
ON b.usi = a.usi
WHERE b.usc = 'ABC'
AND a.cfs = '01.01.2013')