![]() |
Hat Trigger kein Before?
Kann es sein das die Trigger in der SAP DB 7.4 nur AFTER kenn und nicht BEFORE?
KLAPPT:
SQL-Code:
KLAPPT NICHT:
CREATE TRIGGER AUTOINCADR FOR admin.ADRESSEN AFTER INSERT EXECUTE
( SELECT ADRESS_ID FROM ADMIN.ADRESSEN ORDER BY ADRESS_ID ASC; INSERT INTO ADMIN.ADRESSEN (ADRESS_ID) VALUES ('test'); )
SQL-Code:
[edit=Admin]SQL-Statements in Tags [ sql] und [ /sql] gesteckt. Bitte künftig selber machen. Danke. ;-) Mfg, Daniel[/edit]
CREATE TRIGGER AUTOINCADR FOR admin.ADRESSEN BEFORE INSERT EXECUTE
( SELECT ADRESS_ID FROM ADMIN.ADRESSEN ORDER BY ADRESS_ID ASC; INSERT INTO ADMIN.ADRESSEN (ADRESS_ID) VALUES ('test'); ) |
Re: Hat Trigger kein Before?
in SAP DB scheint das der Fall zu sein.
In ihrer Syntaxdefinition eines Triggers steht explizit nur "AFTER": Zitat:
|
Re: Hat Trigger kein Before?
Verdammt.
AFTER INSERT wird erst ausgeführt nachdem der Datensatz gespeichert ist? Dann hätt ich ein Problem: Will nämlich das, wenn man einen neuen Datensatz anlegt, der Trigger automatisch das feld ADRESS_ID (PrimayKey, NotNull) mit dem nächsten fortlaufenden Wert füllt. Das Problem ist, solange da nichts drin steht kann ich nicht speichern, und solange ich nicht speichern kann, steht da nichts drin (Der Trigger wird ja erst nach dem Speichern ausgeführt). Seh ich das richtig? |
Re: Hat Trigger kein Before?
Die Argumente für Interbase werden (zumindest für mich) immer offensichtlicher. Da habe ich 6 Trigger zur Auswahl. Jeweils INSERT, UPDATE und DELETE für AFTER und BEFORE. Ähnlich siehts mit Views und SP aus. Soweit ich weiß, hat MS-SQL nur drei Trigger. Und SAP baut darauf auf. ADS z.B. hat zumindest in der freien Version nicht mal Transaktionen.
|
Re: Hat Trigger kein Before?
Was ist ADS?
|
Re: Hat Trigger kein Before?
Was ist an diesem Statement falsch?
Delphi-Quellcode:
Das krieg ich als meldung:
CREATE TRIGGER AutoIncAdresse FOR admin.ADRESSEN AFTER INSERT EXECUTE
( IF :new.ADRESS_ID IS NULL THEN SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN ELSE IF :new.ADRESS_ID <= 0 THEN SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN ENDif; IF :new.ADRESS_ID IS NULL THEN :new.ADRESS_ID := 1; ENDIF; )
Delphi-Quellcode:
Wobei das ":new.ADRESS_ID" (Erste Zeile) rot geschrieben da steht. Geh mal davon aus da da der Fehler liegt
---- Error -------------------------------
Auto Commit: On, SQL Mode: Internal, Isolation Level: Committed General error;-7045 POS(80) Parameter spec not allowed. CREATE TRIGGER AutoIncAdresse FOR admin.ADRESSEN AFTER INSERT EXECUTE ( IF :new.ADRESS_ID IS NULL THEN SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN ELSE IF :new.ADRESS_ID <= 0 THEN SELECT MAX(ADRESS_ID) + 1 INTO :new.ADRESS_ID FROM admin.ADRESSEN ENDif; IF :new.ADRESS_ID IS NULL THEN :new.ADRESS_ID := 1; ENDIF; ) |
Re: Hat Trigger kein Before?
Ist das jetzt wichtig ? Advanced Database Systems, eine Datenbank.
|
Re: Hat Trigger kein Before?
Ich hab mich auch für Interbase (respektive FireBird) entschieden, weil sie
a) 6 Trigger haben und b) UDF's unterstützen, die leicht zu programmieren sind. und ich bin seit über 4 Jahren SEHR glücklich damit ! LG, MRN |
Re: Hat Trigger kein Before?
ich kann mir die DB leider nicht aussuchen
|
Re: Hat Trigger kein Before?
Der Link,den ich dir gestern gepostet habe enthät alle Infos, die du zum erstellen von Triggern benötigst.
Die schreiben dort z.B: Zitat:
Im Trigger-code darfst du keinen ":" davor schreiben. p.s.: bis jetzt konnte ich fast jede deiner Fragen beantworten indem ich 2 Minuten auf dieser Seite gesucht habe. Und ich habe keinen blassen Schimmer von SAP DB! Mach dich dort mal schlau, außerdem hat dir MyRealName in deinem "SQL Trigger Tut" -thread diesen Link gepostet ![]() Versteh' mich nicht falsch, aber erst suchen dann fragen. :roteyes: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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-2025 by Thomas Breitkreuz