[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.120

    Datensatz per Embedded SQL in Tabelle schreiben mit autogenerated Key

    Hallo,

    ich habe eine SQL beschriebene Tabelle mit einem autogenerated key:

    Code:
    create table eddatlib/siszakop (
     zk_rec_id  decimal(15)    generated always as identity,
    ...
    Den Datensatz der Datei habe ich als externe Datenstruktur im Programm deklariert. Die Variable heißt ZAKOPSatz. Ich möchte gerne den kompletten Satz in die Datei schreiben, also nicht alle Felder einzeln. Das mache ich so:
    Code:
              exec sql insert into siszakop values :ZAKOPSatz;


    Ich bekomme beim insert den SQL-Fehler
    Code:
    Wert kann nicht für GENERATED-ALWAYS-Spalte ZK_REC_ID angegeben werden. 
    Unerwarteter SQLCOD: -798 in Routine SIS99ZKF01.


    Das liegt sicher daran, dass das RPG-Programm den gesamten Datensatz, also auch das Record-ID Feld schreiben will. Beim SQL müsste man aber genau dieses Feld weglassen, da es ja automatisch generiert wird.
    Hat vielleicht jemand eine Idee, wie man das hinkriegt? Wenn es keine Lösung gibt, muss ich die Datei wieder so ändern, dass ich die Record-ID selber vergebe.


    Dieter

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Leg eine View an, mit allen Spalten außer der Identity Column.
    Definiere den Satz als externe Datenstruktur, fülle die entsprechenden Felder und mach dann den insert gegen die View.

    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

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Danke Birgitta. Das ist zwar eine gute Idee (muss ich mir merken), aber in diesem Fall möchte ich das lieber nicht machen. Dann hätte ich 2 Stellen, an denen ich bei einer Dateierweiterung Änderungen vornehmen muss. Ich suche eine Lösung, bei der ich den einmal deklarierten Datensatz in die Datei schreiben kann.
    Ich hatte gehofft, dass es bei der Definition der Tabelle noch irgendeine Möglichkeit gibt, die dafür sorgt, dass bei Insert immer eine Record-ID automatisch vergeben wird, egal was in der übergebenen Struktur steht. (Bitte jetzt keinen Trigger vorschlagen :-) )

    Ich werde die Tabelle dann wohl auf "manuell" zu vergebende Record-ID umstellen.

    Vielen Dank.

    Dieter

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das müsste eigentlich auch mit Nullbyte map gehen

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Kann ich die Nullbyte map denn zu einem Bestandteil der Datenstruktur machen? Oder wie sollte man das deklarieren?

    Dieter

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... das sind dann zwei Bestandteile ohne komma dazwischen
    insert into ... values(:record :nullb)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Eine Array, also dim(nn) in der Anzahl Felder der DS:
    exec sql insert into siszakop values :ZAKOPSatz :ZNullArray;
    Das richtige Feld dann mit "-1" als NULL definieren.
    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

  8. #8
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Welchen Datentyp muss das Array denn haben? Ich dachte, so ein Nullbyte Array bestände aus Indikatoren.

    Ein weiteres Problem ist, dass ich die Dimension des Arrays ja zur Compilezeit festlegen muss. Das heißt, beim Hinzufügen eines Feldes in die Dateistruktur ist es mit dem Durchwandeln des Programms nicht getan. Oder darf das Array mehr Elemente beinhalten als Felder in der Datei stehen? Dann könnte man es ja relativ groß machen.

    Vielen Dank.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Letzteres ist korrekt.
    D MyNullArr 5I 0 dim(512)
    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

  10. #10
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Vielen Dank für die Hilfe!

    Dieter

  11. #11
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Ich habe es ausprobiert. Fubktioniert leider doch nicht. Ich bekomme das Programm kompiliert, aber beim Schreiben in die Datei gibt es Datenzuordnungsfehler und einen SQL-Fehler:
    callnew sis99zk01
    Datenzuordnungsfehler in Teildatei SISZAKOP.
    Datenzuordnungsfehler in Teildatei SISZAKOP.
    Datenzuordnungsfehler in Teildatei SISZAKOP.
    Nullwerte für Spalte oder Variable ZK_REC_ID nicht zulässig.
    Unerwarteter SQLCOD: -407 in Routine SIS99ZKF01.

    Anscheinend ist NULL doch noch etwas mehr als wenn man das Feld beim insert ganz weglässt.

    Das Feld ist definiert als:
    zk_rec_id decimal(15) generated by default as identity,

    Dieter

  12. #12
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hi zusammen,

    war da nicht was mit
    PHP-Code:
    overriding system value oder
    overriding user value 
    gruß
    Michael

Similar Threads

  1. Antworten: 40
    Letzter Beitrag: 03-11-14, 09:15
  2. Sonderzeichenproblem beim Schreiben in i5-Tabelle (z.B. €)
    By Karlchen50 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 20-08-14, 14:14
  3. Satz in Datenbankdatei in CL schreiben??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 02-04-03, 15:52
  4. Von AS/400 direkt in MS-SQL-Server schreiben
    By Michael@Paff.de in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 28-04-02, 08:42
  5. CA-Verbindung beendet sich nach jedem ODBC Datensatz
    By Carsten in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 22-01-02, 08:15

Berechtigungen

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