我試圖讓這個代碼排序,而且它編譯,但是當我通過刪除一條記錄測試,如果給出了: 無效的IDOracle觸發器不起作用
該錯誤可能是在:老部分,但我無法弄清楚。
這是我的代碼。
create or replace trigger t_OnDeleteCategory
create or replace trigger t_OnDeleteCategory
before delete on Categorie
for each row
declare
v_textMail varchar2(2000);
v_emailAdres MailAbonnee.emailAdres%type;
v_Voornaam MailAbonnee.voornaam%type;
v_Achternaam MailAbonnee.Achternaam%type;
c_cursor SYS_REFCURSOR;
v_sql varchar2(2000);
v_categorienaam categorie.naam%type;
begin
v_categorienaam := :old.naam;
--1) mailbericht verzenden
v_sql := 'select voornaam, achternaam, emailAdres from MailAbonnee where id in (select mailAbonneeID from CategorieAbonnement where categorieNaam = v_categorienaam)';
open c_cursor for v_sql;
loop
fetch c_cursor into v_Voornaam, v_Achternaam, v_emailAdres;
exit when c_cursor%notfound;
v_textMail := 'Beste ' || v_Voornaam || ' ' || v_Achternaam || ', uw abonnement is opgeheven voor Categorie '|| v_categorienaam || '.';
sendMailAbonnee(v_textMail, v_emailadres);
end loop;
--2) verwijder alle abonnementen
delete from CategorieAbonnement where categorieNaam = v_categorienaam;
--3) pas alle nieuwsberichten aan
update Nieuwsbericht set categorieNaam = '' where categorieNaam = v_categorienaam;
end;
是否有原因需要在觸發器中使用動態SQL?在這裏似乎沒有必要。但是也許你已經簡化了這個問題以便在這裏發佈,並且在你的實際代碼中有一些原因需要動態SQL。 –
你能向我們展示'Categorie'和'MailAbonnee'的表結構嗎? – Drumbeg
你有'創建或替換觸發器t_OnDeleteCategory'兩次在開始 –