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

    Externe Datenstrukturen verketten

    Hallo zusammen,

    ich habe eine Frage bezüglich externer Datenstukturen. Ist es möglich zwei externe Datenstrukturen zu verketten?

    Bsp.:
    D SQLDS e ds EXTNAME(DAT)
    D SQLDS e ds EXTNAME(DAT2) ???

    Dies geht natürlich nicht, da es zweimal den gleichen Datenstukturnamen gibt.

    Gibt es eine Möglichkeit, ohne dass ich sämliche Felder der Dateien einzeln in einer Datenstruktur zusammenfassen muss??

    Danke im voraus

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... SQLDS ist als Name keine gute Idee, da kann der Precompiler von embedded SQL den Husten kriegen (was selbst nach einem Release Wechsel mit vorher funktionierenden Programmen passieren kann). Ansonsten geht da (leider) fas alles mit like und likeds, soweit die Feldnamen alle eindeutig (mit oder ohne qualified) bleiben. Man muss dabei im Auge behalten, dass Datenstrukturen Speicherbeschreibung sind (mich schüttelts schon wieder)...

    D*B


    Zitat Zitat von AS400SD Beitrag anzeigen
    Hallo zusammen,

    ich habe eine Frage bezüglich externer Datenstukturen. Ist es möglich zwei externe Datenstrukturen zu verketten?

    Bsp.:
    D SQLDS e ds EXTNAME(DAT)
    D SQLDS e ds EXTNAME(DAT2) ???

    Dies geht natürlich nicht, da es zweimal den gleichen Datenstukturnamen gibt.

    Gibt es eine Möglichkeit, ohne dass ich sämliche Felder der Dateien einzeln in einer Datenstruktur zusammenfassen muss??

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

  3. #3
    Registriert seit
    Apr 2008
    Beiträge
    6
    Ok, ich habe mich da falsch ausgedrückt:

    Ich benötige zur Anzeige in einem Bildschirmformat zwei Dateien. Normalerweise macht man ein select mit den dementsprechenden Feldern der Dateien und muss diese dann in Datenstrukturen zusammenfassen. Ich wollte mir das ersparen und wollte nun wissen ob man zwei externe Datein unter einer Datenstruktur zusammenfassen kann z.B. mit dem EXTNAME(....).

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... create view as select ...

    D*B

    Zitat Zitat von AS400SD Beitrag anzeigen
    Ok, ich habe mich da falsch ausgedrückt:

    Ich benötige zur Anzeige in einem Bildschirmformat zwei Dateien. Normalerweise macht man ein select mit den dementsprechenden Feldern der Dateien und muss diese dann in Datenstrukturen zusammenfassen. Ich wollte mir das ersparen und wollte nun wissen ob man zwei externe Datein unter einer Datenstruktur zusammenfassen kann z.B. mit dem EXTNAME(....).
    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
    Aug 2001
    Beiträge
    2.928
    Du kannst im Fetch auch mehrere Datenstrukturen und Einzel-Felder angeben:

    Code:
    D MyExtDS1      E DS                  ExtName(MyFile1)       
    D MyExtDS2      E DS                  ExtName(MyFile2)       
    
     /Free
       Exec SQL 
          Declare MyCsr Cursor For
             Select *
                From MyFile1 join MyFile2 on .... ;
    
       Exec SQL Open MyCsr;
        .....
       Exec SQL Fetch Next From MyCsr 
                      into :MyExtDS1, :MyExtDS2;
    Mit verschachtelten qualifizierten Datenstrukturen mit LIKEDS wirst Du kein Glück haben, da der SQL Precompiler nur eine Stufe verarbeiten kann.

    Ich würde allerdings immer nur die Spalten, die benötigt werden selektieren und nicht gnadenlos alles. Zum einen werden bei SELECT * meist jede Menge unnötige Daten transportiert, wodurch wesentlich mehr logische Datenbankzugriffe erfolgen müssen und zum zweiten muss bei Dateierweiterung das Programm angefasst, zumindest jedoch erneut compiliert werden.

    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... Anmerkung zu dem select *:
    bei statischem SQL wird der zur Compiletime aufgelöst, da passiert also bei Dateiänderung nix!!!
    bei dynamischem SQL wird der * zur prepare time aufgelöst und passt dann nicht mehr zur Feldliste, auch nicht bei externen Datenstrukturen, da letztere zur Compiletime aufgelöst werden.

    Anmerkung zum View Layer: genau deswegen greift man grundsätzlich über ein View Layer zu. Damit entkoppelt man Datenbank und Anwendung. Bei Änderung an der Datenbank, hält man das View Layer konstant - bei zusätzlichen Feldern kommen dann neue Views hinzu - die bisherigen liefern dieselben Felder wie vorher!!! Wird eine View nicht mehr benötigt (weil sie durch eine erweiterte abgelöst ist), kann man sie löschen. Probleme, wie vorher geschildert, hat man bei dieser Vorgehensweise grundsätzlich nicht!

    Anmerkung zum Fetch in externe Datenstrukturen mit select Feldliste: das Verfahren ist Fehler trächtig und außerdem ist die Lesbarkeit mies.

    D*B


    Zitat Zitat von B.Hauser Beitrag anzeigen
    Du kannst im Fetch auch mehrere Datenstrukturen und Einzel-Felder angeben:

    Code:
    D MyExtDS1      E DS                  ExtName(MyFile1)       
    D MyExtDS2      E DS                  ExtName(MyFile2)       
    
     /Free
       Exec SQL 
          Declare MyCsr Cursor For
             Select *
                From MyFile1 join MyFile2 on .... ;
    
       Exec SQL Open MyCsr;
        .....
       Exec SQL Fetch Next From MyCsr 
                      into :MyExtDS1, :MyExtDS2;
    Mit verschachtelten qualifizierten Datenstrukturen mit LIKEDS wirst Du kein Glück haben, da der SQL Precompiler nur eine Stufe verarbeiten kann.

    Ich würde allerdings immer nur die Spalten, die benötigt werden selektieren und nicht gnadenlos alles. Zum einen werden bei SELECT * meist jede Menge unnötige Daten transportiert, wodurch wesentlich mehr logische Datenbankzugriffe erfolgen müssen und zum zweiten muss bei Dateierweiterung das Programm angefasst, zumindest jedoch erneut compiliert werden.

    Birgitta
    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. Barcode in externe PRTF
    By Jump4738 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 06-10-06, 15:08
  2. Externe Prozeduren/Bindeverzeichnisse
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 18-07-06, 09:05
  3. Datenexport in externe Access mdb
    By scriptingmike in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 07-06-06, 08:29
  4. externe Textdatei einlesen
    By sargejogi in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 14-09-04, 12:22
  5. Externe eMails auf der AS/400 empfangen
    By Klaus Rotering in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 26-01-01, 08:58

Berechtigungen

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