Esempio: Cancellare dati con primary key
La seguente procedura cancella da una tabella alcuni dati utilizzando la sua chiave primaria.
Se si verifica l'errore foreign key violation error vuol dire che ci sono altre tabelle che hanno delle chiavi esterne che puntano alla tabella da cancellare. In questo caso, in assenza di CASCADE, si devono cancellare tutte le tabelle in relazione con quella di partenza.
CREATE OR REPLACE PROCEDURE schema1.PRC_DELETE_CHIAVE IS
CURSOR cur_idCARTELLA IS
SELECT ID_CARTELLA
FROM CARTELLA
WHERE SISTEMA_PROVENIENZA in ('LoC','bar')
AND COD_STATO 0
AND COD_STATO 4
AND DT_FINE_MERITO < SYSDATE - 365;
BEGIN
FOR CARTELLA_CUR IN CUR_IDCARTELLA
LOOP
DELETE FROM ESITI WHERE ID_CARTELLA = CARTELLA_CUR.ID_CARTELLA;
DELETE FROM RICHIESTA_BLOB WHERE ID_RICHIESTA IN (SELECT ID_RICHIESTA FROM richiesta WHERE ID_CARTELLA = CARTELLA_CUR.ID_CARTELLA);
DELETE FROM RICHIESTA WHERE ID_CARTELLA = CARTELLA_CUR.ID_CARTELLA;
DELETE FROM CARTELLA WHERE ID_CARTELLA = CARTELLA_CUR.ID_CARTELLA;
COMMIT;
EXIT WHEN CUR_IDCARTELLA%NOTFOUND;
END LOOP;
END;
/
BEGIN
PRC_DELETE_CHIAVE();
END;
/