몇 가지 forall 루프에서 반복 할 sysid 컬렉션이 있습니다. 이 스크립트는 정기적으로 실행하기위한 것이므로 컬렉션이 데이터베이스에 유지되어 있는지 확인하고 스크립트를 그대로 유지해야하는지 알고 싶습니다.두 번 이상 실행해야하는 Oracle PL/SQL 스크립트에서 콜렉션을 지워야합니까?
또한 PL/SQL을 처음 사용하므로 스크립트에 이상이있는 경우 알려주십시오.
이것은 Oracle 10g 및 11g에서 실행됩니다. 블록의 실행 완료 후에는 더 이상 존재하지 않게
감사
DECLARE
TYPE sSysid IS TABLE OF person.sysid%TYPE
INDEX BY PLS_INTEGER;
l_sSysid sSysid;
BEGIN
SELECT sysid
BULK COLLECT INTO l_sSysid
FROM person
where purge_in_process = 1;
FORALL i IN l_sSysid.FIRST .. l_sSysid.LAST
delete from person_attribute where property_pk like concat(l_sSysid(i), '%');
FORALL i IN l_sSysid.FIRST .. l_sSysid.LAST
delete from person_property where person_sysid = l_sSysid(i);
FORALL i IN l_sSysid.FIRST .. l_sSysid.LAST
delete from person where sysid = l_sSysid(i);
END;
/
commit;