![]() |
SQL Trigger Turorial
Weiß einer von euch wo ich ein gutes Tutorial für SQL Trigger finde?
|
Re: SQL Trigger Turorial
kommt immer drauf an, mit welcher Db Du arbeitest.
MS SQL Server hat zum Bsp. nur 3 Trigger, Interbase/FireBird wartet mit 6 auf. Einer ist für INSERT (Before & After Insert), dann UPDATE und DELETE... Ansonsten kannst im Trigger wie in einer SP programmieren. zusätzlich gibt Dir die DB noch möglichkeiten, herauszubekommen, was geändert wurde. Bei MS SQL gibt es (wenn ich mich recht entsinne !) 2 Tabellen (Deleted & Inserted, bei Update mußt Du 'ne Kombination von beidem nehmen, da bei update der DS delted wird und dann inserted). FireBird stellt die Variablen "New" und "OLD" zur Verfügung |
Re: SQL Trigger Turorial
Das ist ne SAP DB 7.4 Datenbank
Hab diese Trigger mal mit ner Access-DB gemacht:
Delphi-Quellcode:
Aber da sagt der immer
CREATE OR REPLACE TRIGGER personal_log_t
AFTER INSERT OR UPDATE OR DELETE ON Felder DECLARE dmltype VARCHAR2(1); BEGIN IF INSERTING THEN dmltype := 'I'; INSERT INTO felder ( Cat_Tab ) VALUES ( dmltype ); END IF; END; CREATE TRIGGER FelderTabs FOR Felder AFTER UPDATE EXECUTE ( AFTER INSERT ON Felder BEGIN IF INSERTING THEN INSERT INTO Tabs ( Cat_Tab ) VALUES ("Insert"); END IF; ) CREATE TRIGGER test FOR Felder BEFORE INSERT AS BEGIN INSERT INTO Tabs (Cat_Tab) Values ("Test"); END;
Code:
Liegt das an der DB?
Syntaxfehler in CREATE TABLE-Anweisung
|
Re: SQL Trigger Turorial
Zitat:
Zitat:
|
Re: SQL Trigger Turorial
Access kennt (IMHO !) keine Trigger. Bei SAP muß ich passen. Aber es gibt sicherlich ne gute Doku zu SAP, schau doch mal rein, was Du da zum Erstellen von Triggern brauchst und welche Anweisungen innerhalb des Triggers gültig sind.
MyRealName |
Re: SQL Trigger Turorial
Ich hab mal in ner SAP DB 7.4 DB mal folgendes ausprobiert:
Hab ne Tab "Einheiten" mit nem Feld "EINHEIT_ID" Will jetzt das der, wenn ich das feld ändere (Update) das Statement "select * from artikel ausführt:
Delphi-Quellcode:
Aber der sagt immer:
create trigger test on einheiten for update as
if update(EINHEIT_ID) begin select * from artikel; end;
Delphi-Quellcode:
[SAP AG][SQLOD32 DLL][SAP DB]Syntax error or access violation;-3014 POS(21) Invalid end of SQL statement
|
Re: SQL Trigger Turorial
naja, wie gesagt, kenn SAP DB ned, aber kann es sein, daß es vielelicht sehr restriktiv ist und erwartet, daß Du damit was anfängst ? Bei FireBird/Interbase sähe das so aus
begin For SELECT * FROM Artikel INTO :Var1, :Var2 Do begin /* Do something */ end end Vielelicht hilft Dir das, ansonsten in der Doku zu SAP nachschauen, was der Fehler ist (und was die Fehlernummer bedeutet). MyRealName |
Re: SQL Trigger Turorial
Hab nochmal ein bisschen ausprobiert! Kann irgendwer mit dieser Fehlermeldung was anfangen?
Code:
Das kam nachdem ich das in ner SAP DB-Datenbank ausführen wollte:
Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben
Delphi-Quellcode:
DROP TABLE SALS;
CREATE TABLE SALS (JOB VARCHAR2(9) primary key, MINSAL NUMBER(7,2), MAXSAL NUMBER(7,2) ); INSERT INTO SALS VALUES ('CLERK', 800, 1300); INSERT INTO SALS VALUES ('ANALYST', 3000, 3500); INSERT INTO SALS VALUES ('SALESMAN', 1250, 1600); INSERT INTO SALS VALUES ('MANAGER', 2450, 2975); INSERT INTO SALS VALUES ('PRESIDENT', 5000, 5500); create or replace trigger check_salary_EMP after insert or update of SAL, JOB on EMP for each row when (new.JOB != 'PRESIDENT') declare minsal number; maxsal number; begin -- retrieve minimum and maximum salary for JOB select MINSAL, MAXSAL into minsal, maxsal from SALS where JOB = :new.JOB; -- If the new salary has been decreased or does not lie -- within the salary range raise an exception if :new.SAL < minsal or :new.SAL > maxsal then raise_application_error(-20225, 'Salary range exceeded'); elsif :new.SAL < :old.SAL then raise_application_error(-20230, 'Salary has been decreased'); elsif :new.SAL > 1.1*:old.SAL then raise_application_error(-20235, 'More than 10% salary increase'); end if; end; |
Re: SQL Trigger Turorial
ich leider ned, kenne de SAP-Syntax überhaupt ned :(
Sorry |
Re: SQL Trigger Turorial
Also ersteinmal.
Glückwunsch - du arbeitest dort mit 'ner ORACLE DB! :bouncing4: Die Syntax ist eindeutig Oracle genau wie die vorinstalltierten tabellen, die du verwendest. Meldest du dich als Scott /passwort Tiger an? Wenn nicht dann solltest du vor deine Tabellen noch ein "scott." tippen, sonst wird die DB die tabellen nicht finden können. Vielleicht irre mich ja, aber das wäre einfach ein zu krasser Zufall. |
Re: SQL Trigger Turorial
Nur um sicher zu gehen, tippe mal unter Start\ausführen %SystemRoot%\system32\services.msc /s ein.
In der Liste der Dienste müsste irgendwo "OracleOraNT[XXX]ClientCache" auftauchen ([XXX] ist die Oracle version). Poste mal was du gefunden hast. |
Re: SQL Trigger Turorial
Liste der Anhänge anzeigen (Anzahl: 1)
Leider nicht gefunden
|
Re: SQL Trigger Turorial
Also die Befehle die du verwendest sind eindeutig ORacle (auf jeden Fall raise_application_error!).
Suche auf deinem Rechner mal die Datei "oci.dll" oder "ociw32.dll". Wenn du die findest läuft auch ein Oracle-Client bei dir. |
Re: SQL Trigger Turorial
Das glaub ich weniger. Die Sache war die: Ich hab von meinem Ausbilder den Auftrag bekommen mir mal die Trigger anzugucken. Leider bin ich damit noch nicht so weit gekommen. Das einzige was ich weiß, ist was ein Trigger ist (Proceduren in ner Datenbank, oder?) und das alle Datenbanken nen verschiedenen Syntax für die Trigger haben. Aber für meine SAP DB 7.4 - Datenbank hab ich irgendwie noch nichts gefunden, was läuft. Hab einfach mal den Oracle-Text genommen und ausprobiert, ohne zu wissen das es Oracle ist. Kennst du dich nicht vielleicht damit aus?
|
Re: SQL Trigger Turorial
|
Re: SQL Trigger Turorial
|
Re: SQL Trigger Turorial
:firejump: ich war schneller :firejump:
:mrgreen: |
Re: SQL Trigger Turorial
LOL...Das sagt mir immer "Invalid end of SQL-Statement"
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz