-
SQL Trigger insert - einfacher?
Hallo,
ich möchte einen SQL Trigger für insert einfacher schreiben, wenn möglich.
Datei test90: Felder f1, f2
Datei test91: Felder f1, f2
create trigger test90i after insert
on test90
REFERENCING NEW ROW AS NROW
for each row mode db2row
begin insert into test91 (f1, f2)
values(nrow.f1, nrow.f2); end
--------------------------------------
Kann ich das auch variabel halten?
In diesem Beispiel gebe ich die Felder und Values explizit an. Wenn ich 100 Felder habe, wird das aufwendig und muss bei einer Datenbankänderung (neues Feld) angepasst werden.
Geht das auch variabel etwa so:
begin insert into test91 select * from nrow; end
Da kommt die Fehlermeldung: file nrow nicht gefunden.
Hat jemand eine Idee?
Danke eure Hilfe!
Grüße
rebe
-
Nein, da hast du schlechte Karten.
Das ist ja gerade Sinn und Zweck, dass der Compiler die Auflösung betreibt und dann sind die SQL's statisch.
Eine Änderung der Tabelle hat dann keine Auswirkungen auf den Trigger, wenn du den Trigger nicht anpasst.
Was du machen kannst, die Quelle per Programm zu generieren und dann per Execute zur Ausführung bringst.
Die "Select *"-Variante funktioniert nur bei den Precompilern für HLL-Sprachen (RPG/COBOL).
-
Hallo,
Ich hab's nicht ausprobiert, aber zwei Ideen:
1. Versuche mal den Insert wie folgt:
PHP-Code:
Insert into MyTable Values(NRow.*);
oder
PHP-Code:
Insert into MTable 1 row values (NRow.*);
2. Wenn Du den Trigger mit For Each Statement (anstatt for Each Row) definierst solltest Du ein Select-Statement ausführen können. Damit könntest Du auch gleich mehrere in die erste Datei eingefügte Datensätze auf einen Schlag in die nächste Datei schreiben.
PHP-Code:
Create Trigger MySchema/MyTrigger After Insert on MyTable Referencing NEW_TABLE as NRows Begin Atomic Insert Into MySchema/NextTable Select * from NRows; End;
Birgitta
-
Hallo,
das Statement unter "2. Create Trigger" funktioniert so.
Was bedeutet in diesem Zusammenhang das Wort "Atomic"?
Grüße
rebe
-
atomic legt fest, was bei einer nicht behandelten Exception innerhalb des Blocks passieren soll, nämlich ein Rollback.
Falls du diesen Ansatz für deine Datenreplikation nehmen willst, wird es immer schräger.
Zum erlauben von Lesezugriffen macht man keine Replikate, das ist ein ernsthafter Design Fehler.
Replikate macht man nicht mit Triggern, sondern über das Journal.
Nochmal unvorteilhaft ist es zu diesem Zweck den Buffer nochmal lesen zu wollen, den kriegt der Trigger schon.
Uniforme Trigger, die man für alle Tabellen haben will, generiert man, dann gibt es auch das vermeintliche * Problem nicht.
D*B,
der sich wundert wieviel Zeit manche Leute für eine Aufgabenstellung bekommen.
 Zitat von rebe
Hallo,
das Statement unter "2. Create Trigger" funktioniert so.
Was bedeutet in diesem Zusammenhang das Wort "Atomic"?
Grüße
rebe
Similar Threads
-
By Robi in forum IBM i Hauptforum
Antworten: 20
Letzter Beitrag: 16-03-09, 10:32
-
By Jenne in forum NEWSboard Programmierung
Antworten: 0
Letzter Beitrag: 19-01-07, 09:24
-
By woki in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 31-10-06, 10:21
-
By bigmoon in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 14-09-06, 18:26
-
By Deficiency in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 13-01-06, 09:00
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks