2017-01-31 19 views
0

テーブルからの削除を防止するこの新しいレンタル履歴テーブルのトリガ。テーブルからの削除を防止するためのトリガー

CREATE OR REPLACE TRIGGER RENTALHIS_DEL 
BEFORE DELETE ON RENTALHISTORY 
BEGIN 
dbms_output.put_line('Records can not be deleted'); 
END; 

DELETE FROM RENTALHISTORY WHERE RENTALID = 1; 



-- It is deleting before it says it can not delete 

1 rows deleted. 

Records can not be deleted 
+3

あなたのトリガーの本体に追加します: 'RAISE_APPLICATION_ERROR(-20001、「レコードを削除することはできません」);' –

+0

はすでにこれを参照してください。回答:http://stackoverflow.com/a/16449271/460557 –

答えて

4
dbms_output.put_line('Records can not be deleted'); 

上記単なるテキストとトリガが正常にして、完了出力します削除はとにかく起こります。あなたが代わりにしたいのは、プログラムが完了しないようにエラーを発生させることです。プログラムを停止し、エラーを発生させるために

使用の標準的な手順raise_application_error

CREATE OR REPLACE TRIGGER RENTALHIS_DEL 
BEFORE DELETE ON RENTALHISTORY 
BEGIN 
    raise_application_error(-20001,'Records can not be deleted'); 
END; 
/
3

メッセージを印刷しないで、エラーを発生させたいとします。削除は、とにかく起こる:

また
CREATE OR REPLACE TRIGGER RENTALHIS_DEL 
BEFORE DELETE ON RENTALHISTORY 
BEGIN 
    RAISE_APPLICATION_ERROR (-20000, 'Deletion not supported on this table'); 
END; 

、あなたは場所を取ってから、削除を防ぐためにinstead ofトリガーを使用することができます。

CREATE OR REPLACE TRIGGER RENTALHIS_DEL 
INSTEAD OF DELETE ON RENTALHISTORY 
BEGIN 
    dbms_output.put_line('Records cannot be deleted'); 
END; 
関連する問題