Констрейнты грамотно включены на cascade, поэтому мне было достаточно отключить констрейнт, который связывает документы с разными датами:
SQL код:
alter table SMSPEC drop constraint SMCSPECCAUSE;
и удаление из SMDOCUMENTS прошло.
SQL код:
create or replace procedure CUT_DATABASE (v_date date) is
v_cnt number;
begin
for c in ( select h.id, h.doctype, h.docstate, h.createdat, h.locationto, h.locationfrom, h.location, s.quantity
from smdocuments h, smspec s
where h.id = s.docid and s.article = '011406'
and ( h.locationto = 4 or h.locationfrom = 4 or h.location = 4)
and h.createdat < v_date
) loop
delete from SMDOCUMENTS where id = c.id;
v_cnt := v_cnt + 1;
end loop;
dbms_output.put_line('deleted '||v_cnt||' documents.');
end;