Saya sarankan untuk menentukan pemicu kebakaran untuk setiap baris. Saya merasa ini jauh lebih mudah.
Anda dapat menghitung untuk melihat apakah MovieStar.Name
nilai sudah ada dan kemudian masukkan jika tidak; itu mirip dengan pendekatan yang Anda miliki di atas. Ini akan gagal jika pengguna lain menyisipkan bintang film antara waktu Anda memeriksa dan waktu Anda memasukkan, tapi mungkin cukup baik untuk tugas kelas. Ada pendekatan tidak gagal yang diterima untuk ini, tetapi Anda mungkin belum membahasnya di kelas.
Cobalah sesuatu seperti ini; itu mungkin menggabungkan semua yang telah Anda pelajari di kelas sejauh ini:
CREATE OR REPLACE TRIGGER TestTrig
AFTER UPDATE OR INSERT ON STARSIN
FOR EACH ROW
DECLARE
movieStarCount NUMBER;
BEGIN
SELECT COUNT(*) INTO movieStarCount
FROM MovieStar
WHERE Name = :NEW.StarName;
IF movieStarCount = 0 THEN
INSERT INTO MovieStar (Name) VALUES (:NEW.StarName);
END IF;
END;