[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2008
    Beiträge
    8

    DB2 Identity ALLWAYS / BY DEFAULT

    Wir wollen unsere DDS auf saubere SQL-Strukturen umstellen, damit die Datenbankzugriffe über c#-Connectoren 1:1 mit SQL-DB's sind.

    Nun haben wir folgendes Problem:

    Wenn wir die Identity-Spalte mit ALWAYS definieren, dann fahren wir mir Kontruckten wie "Insert into DB_neu select * from DB_alt" an die Wand. Gleiches Problem haben wir in einem RPG mit embedded SQL bei "insert into DB values( :ds_DB)" [Anm: :ds_DB ist eine externe DS bezogen auf die DB].

    Wenn wir die Identity-Spalte mit BY DEFAULT definieren, haben wir die beiden obigen Probleme nicht, aber es wird keine Identity erzeugt, da der Werte des Identity-Feldes nicht DEFAULT ist.

    Kann uns jemand einen Tipp geben, wie wir dieses Problem umgehen können?

    Kann man z.B. per Trigger den Wert des Identity-Feldes auf DEFAULT [Anm: NULL und x'00' geht nicht] setzen, dann würde der BY DEFAULT sauber funktionieren.

    Oder kann man bei ALWAYS Felder per Trigger o.ä. wegnehmen?

    Alternative wäre eine Sequenz und die per Trigger zu übernehmen, dann bekommen wir aber mit IDENTITY_VAL_LOCAL() nicht die Ident zurück sondern müßen erst ein SQL-Statement nach schieben um per Select über den Unique-Key die ID wieder auslesen.

    Vielen Dank für jeden Tipp

    Edgar

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    du musst beim Insert einfach nur die IDENTITY-Spalte weglassen.
    Code:
    Insert Into Tab1 (Spalte2, Spalte3) Values ('Wert1', 'Wert2')
    lg Andreas

  3. #3
    Registriert seit
    Apr 2008
    Beiträge
    8
    Hallo Andreas,

    Danke für die Antwort, dann muss ich aber das SQL-Statement im RPG per Hand zusammenbauen und es ist statisch.

    Wenn man eine externe DS nimmt, machst Du einfach einen CLEAR, füllst Deine Felder und führst den "Insert into Db Values(E_DS)" und hast einen dynamischen Construct.


    Edgar

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Naja, RPG mach aus dem "Dynamischen" auch nix anderes als ein Statisches SQL wo die Felder aufgelöst werden.
    Aber es stimmt schon, wenn ein neues Feld hinzugefügt wird, reicht es nicht einfach das Programm neu Umzuwandeln damit die DS aktualisiert wird.

    Vielleicht gibt es ja möglichkeiten das IDENTITY Feld als Hidden zu definieren, dann könntest du es so machen.
    Da auch in der DS das Hidden-Feld per default nicht definiert wird.
    Habe ich aber ehrlich gesagt noch nie probiert ob das überhaupt möglich ist.

    Ansonsten bleibt dir nix anderes übrich als die Spalten anzugeben.

    lg Andreas

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Da auch in der DS das Hidden-Feld per default nicht definiert wird.
    Habe ich aber ehrlich gesagt noch nie probiert ob das überhaupt möglich ist.
    Leider werden die Hidden-Felder auch in der Externen Datenstruktur integriert. SELECT * wählt die Felder nicht aus, beim Fetch in die Datenstruktur knallt es dann!

    Eine Alternative wäre, eine View zu gernerieren, die alle Felder (außer dem Identity-Feld beinhaltet). Diese Datenstruktur wird dann anstatt der Struktur der Tabelle/physischen Datei verwendet.

    Bei Datei-Erweiterung muss die View natürlich entsprechend angepasst werden. Ansonsten reicht dann eine Umwandlung der Programme.

    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

Similar Threads

  1. DB2 identity Nummer
    By Andreas Herzfeldt in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 24-12-12, 09:43
  2. GENERATED BY DEFAULT
    By mwithake in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 05-07-12, 13:00
  3. Zugriff auf DB2 UDB
    By Azaron in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-12-06, 13:42
  4. IBM DB2 Client Configuration Assistant
    By srcdbgr in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 12-09-06, 14:37
  5. NOT NULL WITH DEFAULT
    By deni87991 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 04-08-06, 10:32

Tags for this Thread

Berechtigungen

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