[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    4

    Question nach Insert neu gen. Datensatz ermitteln

    Nach einem Insert innerhalb einer Stored Procedure möchte ich den neu generierten Datensatz weiterverarbeiten. Kann mir jemand sagen, wie man diesen neu generierten Datensatz ermitteln und wieder darauf zugreifen kann ? (Zugriff soll innerhalb der selben Stored Procedure mit dem Insert erfolgen - der Zugriff via eindeutigem Key ist leider nicht möglich, da dieser extern von einem Trigger erzeugt wird.)
    Thanks in Advance
    Matthias

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ausser dem Key hast du doch noch alle Felder in der Prozedur. Warum kannst du die Verarbeitung nicht vor dem Insert ausführen ?
    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 2006
    Beiträge
    4
    da ich für die weitere Verarbeitung den neuen Datensatz bzw. am besten gleich den Key des neuen Datensatzes benötige. Wollte mit dem Insert ein neues Produkt anlegen - Trigger vergibt die neue Produktnummer - und genau diese neue Produktnummer wird für die weitere Verarbeitung benötigt.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Tja, schlechtes Design, würde ich sagen.
    Die Vergabe der neuen Produktnummer sollte dann am besten in eine Funktion verlegt werden, die sowohl vom Trigger als auch von deiner Prozedur aufrufbar ist.
    Ansonsten sehe ich da wirklich schwarz.
    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

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    4

    Question

    Nur wie könnte man dann sicherstellen, dass der Aufruf dieser Funktion (Ermittlung der max. Produktnummer +1) aus der Stored Procedure das selbe Ergebniss liefert, wie aus dem zugehörigen Trigger (die Aufrufe erfolgen zeitlich versetzt und in der Zwischenzeit könnte ja ein andere Job die selbe Funktion aufrufen).

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von M.Kasper
    Nur wie könnte man dann sicherstellen, dass der Aufruf dieser Funktion (Ermittlung der max. Produktnummer +1) aus der Stored Procedure das selbe Ergebniss liefert, wie aus dem zugehörigen Trigger (die Aufrufe erfolgen zeitlich versetzt und in der Zwischenzeit könnte ja ein andere Job die selbe Funktion aufrufen).
    Eigentlich macht man so etwas über Identity Columns, die in den physischen Tabellen definiert werden und nicht über Trigger. Die Verwendung von Identity Columns ist auf alle Fälle performanter als Trigger, da bei einem Trigger immer ein dynamischer Programmaufruf initiiert wird, während bei der Identity Column der Datenbankenmanager den nächsten Wert direkt aus einer Datenstruktur ausliest, diese aktualisiert und auch gleich Folgewerte bereitstellt. Der nächste Wert wird immer ermittelt, unabhängig, wie der Datensatz erstellt wurde, also auch bei native I/O (z.B. über OpCode WRITE in RPG)

    Der aktuelle Wert des zuletzt eingefügten Satzes kann über die skalare Funktion IDENTITY_VAL_LOCAL ermittelt werden.
    Bei dieser Funktion wird der letzte in dem aktuellen Job vergebene Wert der Identity Spalte zurückgeliefert, auch dann wenn zwischenzeitlich durch andere Jobs weitere Sätze geschrieben wurden.

    Um diese Funktionalitäten benutzen zu können, müsstest Du allerdings die Datei/Tabelle über CREATE TABLE neu erstellen. Über der Identity Column MUSS auf alle Fälle ein Unique Index (oder auch DDS-beschriebene logische Datei mit Schlüssel-Wort UNIQUE) angelegt werden. Sollte der eindeutige Zugriffsweg fehlen, kann nicht sichergestellt werden, dass bei Änderung des Start-Wertes oder bei einem Überlauf keine Duplikate erstellt werden.

    Birgitta
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    4

    Thumbs up

    Thanks a lot, für die 100%'tig passende Lösung. Habe es auch schon verifiziert und es funktioniert super.
    Ich war nur etwas verwundert, da in den Red Books bei dieser Lösung immer die Anmerkung zu finden war, dass dies in Verbindung mit einem involvierten Trigger nicht funktionieren würde !! (würden einen neuen Level initiieren ..). Nochmals vielen Dank - CU Mk

Similar Threads

  1. SQL Insert in schleife
    By Robi in forum IBM i Hauptforum
    Antworten: 20
    Letzter Beitrag: 16-03-09, 10:32
  2. PAGRTT aus Printer-File ermitteln
    By MatthiasK in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 10-01-07, 13:26
  3. Datensatz sperren
    By Easyrider in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 06-12-06, 07:48
  4. LPAR Prozessor Leistung Ermitteln
    By Weki in forum NEWSboard Server Software
    Antworten: 6
    Letzter Beitrag: 29-08-06, 09:09
  5. SQL Select mit SUM aus einer DB
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 30-03-06, 12:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •