[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2017
    Beiträge
    47

    update auf eine "joined" logische Datei

    Hallo,
    ich möchte ein SQL-Update auf eine LF-Datei machen. Die ist mittels Join aus zwei physischen Dateien aufgebaut.

    Es kommt da ein SQL0150 ?
    Was wäre eine Alternative zu diesem LF, den ich mit SQL bearbeiten kann?

    DANKE

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Es ist und war noch nie möglich eine gejointe Datei zu ändern, unabhängig davon, ob man mit native I/O oder mit SQL arbeitet.

    Du musst die zugrundeliegenden physischen Dateien einzeln updaten.

    Wenn es eine JOINED View wäre, bestünde noch die Möglichkeit einen Instead Of Trigger dranzuhängen, in dem dann die Updates auf die einzelnen Dateien erfolgt.

    Aber bei DDS beschriebenen logischen Dateien ist das nicht möglich.

    Bwz. Du solltes i.a. auch darauf verzichten logische Dateien mit SQL anzusprechen, sondern entweder über die physischen Dateien oder Tabellen oder über eine View gehen

    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
    Apr 2017
    Beiträge
    47
    Ok, vielen Dank.
    Wilfried

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    klare Empfehlungen von mir:
    - grundsätzlich in der Applikation nur Views verwenden und diese nie ändern, kommt ein Feld hinzu, gibt es eine zusätzliche neue View.
    - instead Trigger sind eine der wichtigsten Neuerungen von DB2/400 in den letzten Releases und sind hier das Mittel der Wahl.
    Im Kern geht es dabei um Entkoppelung von Datenbank und Anwendung. Zieht man das konsequent durch (was auch kompletten Verzicht auf RLA bedeutet), kann man sehr viel am Datenbank Design weiterentwickeln, ohne dass die Anwendung das überhaupt merkt.

    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
    Feb 2011
    Beiträge
    48
    was auch kompletten Verzicht auf RLA bedeutet

    Was ist damit gemeint ?

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    RLA := record level access
    sprich: keine F Bestimmungen, kein setll, chain, read und co.

    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 2011
    Beiträge
    48
    Danke, habe verstanden,

    GJV23

  8. #8
    Registriert seit
    Nov 2009
    Beiträge
    208
    Darf ich nochmal nachfragen ...

    Dateien miteinamder verknüpfen als View, dabei Felder angeben und nicht * (= alle) verwenden!
    In den Programmen mit SQL die View lesen.
    Muß ein Pgm ein Feld eines oder mehrerer PF der View ändern, mach ich im Pgm
    Code:
    Update view set Feld = wert where "eindeutige identifikation des View-Satzes" ...
    (oder geht der update ohne selektion da der Satz ja vorher gelesen wurde? --> Bsp?)

    Und ein Trigger, der mit SQL geschrieben ist macht dann den 'echten' update in das PF?

    Leider finde ich dafür kein Bsp im Netz, hat jemand einen link für mich?
    Bsp f.
    - instead Trigger (source Code)
    - wie werden die an/ab gehängt
    - hängen die an der View oder doch am PF?

    Springt ein 'normaler' Trigger auch noch an, wenn der SQLTrigger die PF ändert/schreibt?

    vielen Dank
    DiBe

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von dibe Beitrag anzeigen
    Darf ich nochmal nachfragen ...

    Dateien miteinamder verknüpfen als View, dabei Felder angeben und nicht * (= alle) verwenden!
    In den Programmen mit SQL die View lesen.
    Muß ein Pgm ein Feld eines oder mehrerer PF der View ändern, mach ich im Pgm
    Code:
    Update view set Feld = wert where "eindeutige identifikation des View-Satzes" ...
    (oder geht der update ohne selektion da der Satz ja vorher gelesen wurde? --> Bsp?)

    Und ein Trigger, der mit SQL geschrieben ist macht dann den 'echten' update in das PF?

    Leider finde ich dafür kein Bsp im Netz, hat jemand einen link für mich?
    Bsp f.
    - instead Trigger (source Code)
    - wie werden die an/ab gehängt
    - hängen die an der View oder doch am PF?

    Springt ein 'normaler' Trigger auch noch an, wenn der SQLTrigger die PF ändert/schreibt?

    vielen Dank
    DiBe
    - normales create view as select mit oder ohne *
    - create instead of trigger in https://www.google.de/url?sa=t&rct=j...7Xcja8T5-KXauU
    - positioned update (mit where current of) oder searched update mit echter where clause
    - der trigger muss dann die Daten auf die Basistabellen verteilen etc.
    - trigger auf den unterliegenden PF werden ausgeführt.

    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/

  10. #10
    Registriert seit
    Nov 2009
    Beiträge
    208
    Vielen Dank!
    Wenn ich mich doch für * = alle Felder entscheide, dann passt Ihr Wunsch: "View nie ändern" aber nicht mehr!
    Und der verweis auf das Red Book ...
    heiß unterm Strich das wir SQL programmieren lernen müssen?
    Bisher reichte uns ein ein bischen
    select
    updat
    delete
    set
    mit verschiedenen "Join" oder mal ein "With" davor.
    Schade, dann wird das wohl noch dauern.
    Danke

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von dibe Beitrag anzeigen
    Vielen Dank!
    Wenn ich mich doch für * = alle Felder entscheide, dann passt Ihr Wunsch: "View nie ändern" aber nicht mehr!
    Das hängt davon ab, worauf sich der Stern bezieht.
    z.B.:
    create table kunde ....;
    create view kundeV1 as select * from kunde;
    create view select k.*, ... from kundeV1,

    zusätzliches Feld für Kunde:
    alter table kunde add column...;
    kundev1 anpassen;
    create view kundeV2 as select * from kunde;
    ...

    Die SQL Programnierung kann man begrenzt halten, Es genügt ein einfacher wrapper für den SQL Trigger, der sofort ein externes (RPG) Programm aufruft, das die eigentliche Arbeit macht. Das hat der durchschnittliche Programmierer in einem Tag drauf.

    Join und/oder with (ist eh' meist ein Zeichen dafür, dass das view layer nix taugt) wird man darin ohnehin nicht finden.

    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/

Similar Threads

  1. Antworten: 1
    Letzter Beitrag: 19-07-17, 11:38
  2. Zend auf System i "Objekte nicht zurück gespeichert"
    By tommi_011 in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 08-09-16, 07:23
  3. "Reverse engineering" aus logischer Datei
    By MoselRBA in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 18-12-14, 14:19
  4. MinusField falsche Darstellung "ü" statt "-"
    By Edi in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 07-11-14, 07:52
  5. Cobol/400 - "Fett", "Unterstreichen" als HEX-Wert
    By RLurati in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 05-08-14, 09:10

Tags for this Thread

Berechtigungen

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