Quiero evitar que se borre cualquier fila con VERSIONID=1
en una tabla determinada. También quiero registrar esto en una tabla de auditoría para que podamos ver cuándo sucede esto con fines de registro. Estoy tratando de hacer esto con un disparador:Evitar que ciertas filas se eliminen en 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;
me sale el siguiente resultado:
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'
Sin embargo, la tabla TPM_AUDIT
está vacía. ¿Estoy haciendo algo mal?
Gracias! Analizaré este enfoque, aunque ahora creo que la auditoría podría ser una mejor característica, ya que también incluirá el texto SQL (que no puedo obtener de un activador).Básicamente, estoy tratando de descubrir por qué estas filas se eliminan aleatoriamente varias veces al mes, aunque no hay nada en la base de código que elimine nada de esta tabla. –