这段代码是写的,它工作了几个月。但是,前一天有一些Oracle更新,现在这段代码不再起作用了。基本上,此代码删除重复项。
delete from integration where rowid in (
select rowid from (
select rowid, intg.*, RANK() OVER (PARTITION BY intg.pid ORDER BY intg.rowid DESC) rk
from integration intg where pid||to_char(entry_date, 'dd.mm.yyhh:mi:ss') in (
select pid||to_char(entry_date, 'dd.mm.yyhh:mi:ss') from integration
group by pid, entry_date
having count(pid) > 1
)
) where rk = 1
);
当我执行此代码时,它只是继续执行。是的,没有重复,所以我应该得到空的结果,而不是坚持执行..任何想法我如何解决这个问题?
干杯!
答案 0 :(得分:0)
你的sql有几个步骤。这需要多长时间才能运行?
select pid||to_char(entry_date, 'dd.mm.yyhh:mi:ss')
from integration
group by pid, entry_date
having count(pid) > 1
这个?
select rowid,
intg.*,
RANK() OVER (PARTITION BY intg.pid ORDER BY intg.rowid DESC) rk
from integration intg
where pid||to_char(entry_date, 'dd.mm.yyhh:mi:ss') in (select pid||to_char(entry_date, 'dd.mm.yyhh:mi:ss')
from integration
group by pid, entry_date
having count(pid) > 1
)
您尝试删除的数据是否可能存在其他锁定?您可以使用tools-> sessions或使用字典表(例如字典表)在pl / sql开发人员中找到有关锁的信息。 V $锁