2-3 Fragen zu Prozeduren und Trigger
Shaguar
- datenbank
Hallo zusammen,
kann mir jemand sagen wie ich in prozeduren die in der parameterliste definierten variablen auch benutzen kann, bzw später als variable kenzeichnen
also zb create procedure test ( IN test varchar(20) ) Begin Create Table test .......... END;
Dort sollte er dann test nicht als Namen nehmen sonder als Variable die ich übergebe.
Mein zweites Problem dreht sich um Trigger.
Mein Ziel ist es einen Trigger zu erstellen der eine bestimmte Tabelle überwacht und wenn in dieser Tabelle der etwas geändert wird (insert, update, delete) dann soll das mit Hilfe der Triggerfunktion protokolliert werden.
CREATE TRIGGER Test
BEFORE INSERT, UPDATE, DELETE,
UPDATE ON ESPKontrolle
FOR EACH ROW
.........
BEGIN
END;
Soweit hab ich das bisher, nur ist mir noch nicht genau klar wo ich bei der Trigger definition definiere welche Tabelle er überwachen soll und in welche er protokollieren soll, die EspKontrolle Tabelle ist in diesem Fall die Tabelle in der er schreiben soll.
Am Ende soll der Trigger dann einen Insert befehl eine tabelle machen wo dann datum, zeit, person die die änderung gemacht hat, art der Änderung, alter Preis und neuer Preis (is ne Preis Tabelle die überwacht werden soll)
Danke schon mal im Vorraus, hoffe ihr könnt mir da ein bisschen weiterhelfen.
Mfg
moin,
reden wir hier über PL/SQL, bzw. Oracle und welche version ? wenn ja dann wäre NDS (dynamisches SQL) dein stichwort. was die zweite frage betrifft, so gibt der name nach dem schlüsselwort ON die tabelle an, die er "überwacht". im code wo du definierst, was passieren soll gibst du dann den tabellennamen an, wo er was reinschreiben soll. noch als hinweis, ein trigger kann vor der DML anweisung feuern, als auch danach. in deiner situation musst du dir überlegen, ob es nicht mehr sinn macht, danach abgefeuert zu werden.
Ilja
hi,
wir reden über Sybase SQL Anywhere.
Ok also dann in etwa so:
CREATE TRIGGER Test
AFTER INSERT, UPDATE, DELETE,
ON EKStaffPreis
FOR EACH ROW
BEGIN
INSERT INTO EspKontrolle (...) VALUES (.....);
END;
Die Frage wäre dann noch woher bekomm ich den alten und den neuen Preis, muss man da irgendwas mit "REFERENCING OLD AS ... NEW AS .... " machen? und wie bekomm ich den User raus der die operation durchgeführt hat und vorallem welche Operation er gemacht hat?
moin,
Die Frage wäre dann noch woher bekomm ich den alten und den neuen Preis, muss man da irgendwas mit "REFERENCING OLD AS ... NEW AS .... " machen? und wie bekomm ich den User raus der die operation durchgeführt hat und vorallem welche Operation er gemacht hat?
es gibt referenzen ja, du musst aber eben auf die eigenheiten des jeweiligen DBMS eingehen, bei oracle wäre das zum beispiel :OLD.Spaltenname oder :NEW.Spaltenname. Auch was den usernamen betrift gibt es bestimmt auch eine entsprechene variable des DBMS. bei oracle heißt die schlicht "User", die du ansprechen kannst.
Ilja