Nicht auffindbarer fehler

hallo! habe einen trigger geschrieben und ich komm einfach nicht hinter den fehler! bin am verzweifeln gg! vielleicht könnt ihr mir ja helfen! bedanke mich schon im vorhinein!
das datenmodell sieht wie folgt aus (mit erwin) http://praktifix.spengergasse.at/~chv

danke sabrina

und nun der trigger
create or replace TRIGGER genugsitze
BEFORE INSERT or UPDATE on seminarteilnehmer
for each row
declare
cursor gab is
select max(r_pl) as r_pl, count(*) as t_anz
from raume r, seminarteilnehmer st
where r.r_id = st.r_id
and :new.r_id=st.r_id
and :new.s_datum=st.s_datum
and :new.s_anfang=st.s_anfang;
begin
open gab;
if(gab.r_pl>gab.t_anz)
raise_application_error(-20001,‚Dieses Seminar hat ihre maximale
Teilnehmeranzahl bereits erreicht‘);

end genugsitze;

Hallo Sabrina,

Du musst den Cursor auch FETCHen. Nur Öffnen reicht nicht.
FETCH gap;
nach OPEN gap sollte schon genügen.
Offene Cursor muss man wieder schließen!
IF (gap%ISOPEN) THEN
CLOSE gap;
END IF;
Dabei muss man prüfen, ob der Cursor auch wirklich offen ist.

Kan sein, dass du ein:
DECLARE temp gap%ROWTYPE brauchst und ein FETCH gap into temp;
und dann eben temp.spaltenname

Kleiner Tipp:
gib nach dem Kompilieren show errors ein. Dann bekommst DU Hinweise. Ich benutze die Variante für Faule: Enterprise Manager Console und dann auf der graphischen Oberfläche den Trigger kompilieren und Fehler zeigen. Dann springt der Cursor gleich in die richtige Zeile.

Ein gutes Buch darüber ist von Feuerstein: Oracle PL/SQL Programmierung (gibts jetzt auch auf Deutsch)

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi ihr beide!

Aus der Hüfte geschossen zwei Sachen vom Ursprungstrigger:

create or replace TRIGGER genugsitze
BEFORE INSERT or UPDATE on seminarteilnehmer

select max(r_pl) as r_pl, count(*) as t_anz
from raume r, seminarteilnehmer st

Kommt eventuell die Fehlermeldung „Table is mutating“? Warum? Abfrage auf die Tabelle, auf der der Trigger liegt

Grüße,
Tomh