Desidero impedire che nessuna riga con VERSIONID=1
venga eliminata in una determinata tabella. Voglio anche registrarlo in una tabella di controllo in modo che possiamo vedere quando ciò accade per scopi di registrazione. Sto cercando di fare questo con un innesco:Impedire l'eliminazione di determinate righe in Oracle
CREATE TRIGGER TPMDBO.PreventVersionDelete
BEFORE DELETE ON TPM_PROJECTVERSION
FOR EACH ROW
DECLARE
BEGIN
IF(:old.VERSIONID = 1)
THEN
INSERT INTO TPM_AUDIT VALUES ('Query has attempted to delete root project version!', sysdate);
RAISE_APPLICATION_ERROR(-20001, 'Query has attempted to delete root project version!');
END IF;
END;
Ottengo i seguenti risultati:
SQL> delete from TPM_PROJECTVERSION where PROJECTID=70 and VERSIONID=1;
delete from TPM_PROJECTVERSION where PROJECTID=70 and VERSIONID=1
*
ERROR at line 1:
ORA-20001: Query has attempted to delete root project version!
ORA-06512: at "TPMDBO.PREVENTVERSIONDELETE", line 6
ORA-04088: error during execution of trigger 'TPMDBO.PREVENTVERSIONDELETE'
Tuttavia, la tabella TPM_AUDIT
è vuota. Sto facendo qualcosa di sbagliato?
Grazie! Analizzerò questo approccio, anche se ora ritengo che il controllo possa essere una caratteristica migliore da utilizzare poiché includerà anche il testo SQL (che non posso ottenere da un trigger).Fondamentalmente, sto cercando di capire perché queste righe vengono cancellate casualmente alcune volte al mese anche se non c'è nulla nel codice base che cancelli qualcosa da questa tabella. –