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...)!
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
arg trozdem danke^^, kann mir jmd vllt auch diesen trigger in MySQL erklären?^^ bzw mir meinen Fehler sagen!?
Geändert von DOOFY (26.01.2009 um 12:57 Uhr)
Btw, ein ROLLBACK innerhalb der Funktion wird nicht gehen.
AndreasCode: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
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
ok dankeich werds mal in anderen Foren probieren!
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen