Problem bei Trigger (total n00b am start)

Hi,
ich habe net viel Ahnung, muss aber ne Aufgabe in IT, in der Schule lösen. Habe 2 Tabellen, “Mitglieder” und “Gegenstand”! So nun soll ich mit einen Trigger überprüfen, dass wenn in die Tabelle “Gegenstand” ein neuer Gegenstand eingetragen wird, dass das Mitglied der den Gegesntand eintragen will eine Kaution eingezahlt hat(also die Spalte Kaution >= 0 ist)!
So dafür habe ich folgenden Trigger Probiert!

CREATE TRIGGER darf_user_mitmachen BEFORE INSERT ON Gegenstaende
FOR EACH
ROW
BEGIN IF(
SELECT Kautionsbetrag
FROM Mitglieder
WHERE NEW.BNr = MNr ) <=0
THEN
RAISERROR( ‘Sie muessen zuerst eine Kaution einzahlen, oder Ihren Kautionsbetrag ausgleichen!’, 16, 1)
ROLLBACK
END IF
END;

Die Fehlermeldung:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( ‘Sie muessen zuerst eine Kaution einzahlen, oder Ihren Kautionsbetrag ausgleic’ at line 9

Wenn ich jetzt das RAISERROR entferne kommt folgende Fehlermeldung:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘END IF
END’ at line 10

werde einfach nicht schlau draus sry;( was ist/könnte der Fehler sein?

ps: obwohl ich nicht weiß, ob das ROllBACK sinn macht wenn ichs eh BEFORE mache und ob ich BEFORE bei einem INSERT benutzen kann/darf! Hab aber dazu nix in meinen Unterlagen gefunden und auch nicht drüber im i net gelesn(obwohl es nicht ausgeschlossen ist, dass ich es überlesen habe…)!

Falsches Forum, hier geht es um PostgreSQL. Ich könnte Dir den Trigger zeigen, aber er würde Dir nicht helfen, weil PostgreSQL != MySQL.

Andreas

arg trozdem danke^^, kann mir jmd vllt auch diesen trigger in MySQL erklären?^^ bzw mir meinen Fehler sagen!?

Btw, ein ROLLBACK innerhalb der Funktion wird nicht gehen.

est=# create table mitglieder (id int primary key, kaution numeric(10,2));
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "mitglieder_pkey" for table "mitglieder"
CREATE TABLE
test=# create table gegenstand(id int primary key, person_id int references person);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "gegenstand_pkey" for table "gegenstand"
CREATE TABLE
test=# create or replace function check_mitglied() returns TRIGGER as $$declare k numeric(10,2); begin select into k kaution from mitglieder where id=NEW.person_id; if k <= 0 then raise exception 'Keine Kaution'; end if; return NEW; end; $$ language plpgsql;
CREATE FUNCTION
test=# create trigger trg_kaution before insert on gegenstand for each row execute procedure check_mitglied();
CREATE TRIGGER
test=# insert into mitglieder values (1,10);
INSERT 0 1
test=# insert into mitglieder values (2,0);
INSERT 0 1
test=# insert into gegenstand values (1,1);
INSERT 0 1
test=# insert into gegenstand values (2,2);
ERROR:  Keine Kaution

Andreas

Keine Ahnung, ich schreibe keien MySQL Trigger.

Vielleicht sollte euer Lehrer/Prof euch an den (zumeist kostenpflichtigen) Support vermitteln, ansonsten gibt es auch diverse Foren, die sich nur mit MySQL beschäftigen. Vielleicht dort mal fragen.

ok danke :wink: ich werds mal in anderen Foren probieren!