AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Trigger Turorial
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Trigger Turorial

Ein Thema von Nalincah · begonnen am 2. Dez 2003 · letzter Beitrag vom 3. Dez 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#1

SQL Trigger Turorial

  Alt 2. Dez 2003, 09:05
Weiß einer von euch wo ich ein gutes Tutorial für SQL Trigger finde?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL Trigger Turorial

  Alt 2. Dez 2003, 11:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#3

Re: SQL Trigger Turorial

  Alt 2. Dez 2003, 12:07
Das ist ne SAP DB 7.4 Datenbank

Hab diese Trigger mal mit ner Access-DB gemacht:

Delphi-Quellcode:
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;
Aber da sagt der immer

Code:
Syntaxfehler in CREATE TABLE-Anweisung
Liegt das an der DB?
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4

Re: SQL Trigger Turorial

  Alt 2. Dez 2003, 12:15
Zitat von General2003:
Hab diese Trigger mal mit ner Access-DB gemacht
...
Code:
Syntaxfehler in CREATE TABLE-Anweisung
Liegt das an der DB?
Zitat von MyRealName:
kommt immer drauf an, mit welcher Db Du arbeitest.
Ob Access wohl keine Trigger kennt? In der OH findet man nur CREATE TABLE und CREATE INDEX.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SQL Trigger Turorial

  Alt 2. Dez 2003, 13:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#6

Re: SQL Trigger Turorial

  Alt 2. Dez 2003, 15:11
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:
create trigger test on einheiten for update as
if update(EINHEIT_ID)
begin
  select * from artikel;
end;
Aber der sagt immer:

[SAP AG][SQLOD32 DLL][SAP DB]Syntax error or access violation;-3014 POS(21) Invalid end of SQL statement
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: SQL Trigger Turorial

  Alt 2. Dez 2003, 20:46
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
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#8

Re: SQL Trigger Turorial

  Alt 3. Dez 2003, 11:00
Hab nochmal ein bisschen ausprobiert! Kann irgendwer mit dieser Fehlermeldung was anfangen?

Code:
Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben
Das kam nachdem ich das in ner SAP DB-Datenbank ausführen wollte:


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;
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
679 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: SQL Trigger Turorial

  Alt 3. Dez 2003, 13:24
ich leider ned, kenne de SAP-Syntax überhaupt ned
Sorry
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#10

Re: SQL Trigger Turorial

  Alt 3. Dez 2003, 14:38
Also ersteinmal.
Glückwunsch - du arbeitest dort mit 'ner ORACLE DB!

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz