[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    119

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    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).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    119
    Hallo,

    das Statement unter "2. Create Trigger" funktioniert so.

    Was bedeutet in diesem Zusammenhang das Wort "Atomic"?

    Grüße
    rebe

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    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 Zitat von rebe Beitrag anzeigen
    Hallo,

    das Statement unter "2. Create Trigger" funktioniert so.

    Was bedeutet in diesem Zusammenhang das Wort "Atomic"?

    Grüße
    rebe
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SQL Insert in schleife
    By Robi in forum IBM i Hauptforum
    Antworten: 20
    Letzter Beitrag: 16-03-09, 10:32
  2. SQL Trigger
    By Jenne in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 19-01-07, 09:24
  3. SQL: Insert bei NULL
    By woki in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 31-10-06, 10:21
  4. SQL Trigger
    By bigmoon in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 14-09-06, 18:26
  5. SQL Insert: Zeichenbegrenzung???
    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
  •