Hallo zusammen,
ich werkel jetzt schon den ganzen Tag an diesem Problem rum.
Ich möchte bei jedem insert in meine Tabelle p_Spiel prüfen, ob der Schiedsrichter, welchen ich gerade (per FK) zuweise, auch zugelassen werden darf.
Ok, hier mal mein Code:
create or replace
TRIGGER Trainer_Nationalität_Check
BEFORE Insert or Update ON p_Spiel
FOR EACH ROW
declare
-- Der cursor soll mir zum insert/ update in p_spiel die Länder holen, zu welchen die insert- Mannschaften gehören (Es sind immer 2: Mannschaft 1: Land, Mannschaft 2: Land):
cursor ergebnismenge is
select l.land_name from p_spiel s
join p_antreten_gehort_zu agz on agz.spiel_id = s.spiel_id and s.spiel_id = :new.spiel_id
join p_mannschaftsaufstellung ma on ma.mannschaftsaufstellungs_id = agz.mannschaftsaufstellungs_id
join p_mannschaft m on m.mannschaft_name = ma.mannschaft_name
join p_land l on l.mannschaft_name = m.mannschaft_name order by s.spiel_id;
schiri_land p_Land.land_name%type;
BEGIN
--Hier will ich die l.land_Name info des insert Schiri zwischenspeichern um sie unten im loop (im if) zu verarbeiten:
select l.land_name into schiri_land from p_schiedsrichter s
join p_stammt_von3 sv3 on sv3.schiedsrichter_id = s.schiedsrichter_id
join p_land l on l.land_name = sv3.land_name and s.schiedsrichter_id = :new.hauptschiedsrichter_id;
for elem in ergebnismenge
loop
--if(elem.land_name = :new.)
DBMS_OUTPUT.PUT_LINE (elem.land_name);
end loop;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
Ich bin mir bewusst das FOR EACH ROW und der durchlauf mit dem Cursor nicht funktionieren und der Fehler "ORA-04091: Tabelle DABA11.P_SPIEL wird gerade geändert, Trigger/Funktion sieht dies möglicherweise nicht" kommt, weiß aber keinen anderen weg.
Kann jemand helfen ?
ich werkel jetzt schon den ganzen Tag an diesem Problem rum.
Ich möchte bei jedem insert in meine Tabelle p_Spiel prüfen, ob der Schiedsrichter, welchen ich gerade (per FK) zuweise, auch zugelassen werden darf.
Ok, hier mal mein Code:
create or replace
TRIGGER Trainer_Nationalität_Check
BEFORE Insert or Update ON p_Spiel
FOR EACH ROW
declare
-- Der cursor soll mir zum insert/ update in p_spiel die Länder holen, zu welchen die insert- Mannschaften gehören (Es sind immer 2: Mannschaft 1: Land, Mannschaft 2: Land):
cursor ergebnismenge is
select l.land_name from p_spiel s
join p_antreten_gehort_zu agz on agz.spiel_id = s.spiel_id and s.spiel_id = :new.spiel_id
join p_mannschaftsaufstellung ma on ma.mannschaftsaufstellungs_id = agz.mannschaftsaufstellungs_id
join p_mannschaft m on m.mannschaft_name = ma.mannschaft_name
join p_land l on l.mannschaft_name = m.mannschaft_name order by s.spiel_id;
schiri_land p_Land.land_name%type;
BEGIN
--Hier will ich die l.land_Name info des insert Schiri zwischenspeichern um sie unten im loop (im if) zu verarbeiten:
select l.land_name into schiri_land from p_schiedsrichter s
join p_stammt_von3 sv3 on sv3.schiedsrichter_id = s.schiedsrichter_id
join p_land l on l.land_name = sv3.land_name and s.schiedsrichter_id = :new.hauptschiedsrichter_id;
for elem in ergebnismenge
loop
--if(elem.land_name = :new.)
DBMS_OUTPUT.PUT_LINE (elem.land_name);
end loop;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
Ich bin mir bewusst das FOR EACH ROW und der durchlauf mit dem Cursor nicht funktionieren und der Fehler "ORA-04091: Tabelle DABA11.P_SPIEL wird gerade geändert, Trigger/Funktion sieht dies möglicherweise nicht" kommt, weiß aber keinen anderen weg.
Kann jemand helfen ?