Предотвращение удаления определенных строк в Oracle

Я хочу предотвратить удаление любой строки с VERSIONID = 1 из определенной таблицы. Я также хочу зарегистрировать это в таблице аудита, чтобы мы могли видеть, когда это произойдет, для целей ведения журнала. Я пытаюсь сделать это с помощью триггера:

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;

Я получаю следующие результаты:

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'

Однако таблица TPM_AUDIT пуста. Я что-то делаю не так?

5
задан Mike Christensen 3 January 2012 в 19:50
поделиться