[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Per SQL geht das nur auf Tabellen, die auch mit SQL erstellt wurden
    Das stimmt nicht!!!
    ALTER TABLE kann auch für DDS beschriebene Tabellen ausgeführt werden.
    ... auch wenn ich das NICHT empfehlen würde.

    Eine Spalte im DDS hinzufügen und dann ein CHGPF ausführen ist doch mindestens genauso einfach!

    Beim CHGPF müssen logische Dateien weder gelöscht noch neu erstellt werden, noch müssen irgendwelche Constraints oder Trigger angefasst werden:

    Einfach:
    Code:
    CHGPF FILE(MYLIB/MYFILE)
          SRCFILE(MYSRCLIB/QDDSSRC)
          SRCMBR(MYFILE)
    ausführen.

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Man beachte aber, dass sich die Dateiebenen-ID ändert und alle Programme die auf die PF oder die LF's native zugreifen neu erstellt werden müssen !

    Werden die Tabelle(n) nur per SQL verwendet, ist eine Erstellung der Programme nicht erforderlich.

    @Birgitta
    Danke für den Hinweis.
    Besser wäre es gewesen, dies per SQL abzuweisen.
    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
    Jun 2004
    Beiträge
    86
    Danke für die Tips. Mit ALTER TABLE hat es geklappt.

  4. #4
    Registriert seit
    Jan 2007
    Beiträge
    189
    Zitat Zitat von Fuerchau Beitrag anzeigen
    ...
    Werden die Tabelle(n) nur per SQL verwendet, ist eine Erstellung der Programme nicht erforderlich.
    ...
    IIRC, Wenn man "SELECT * from ..." in eine Programm nutzt, muss man auch dann dieses Programm umwandeln. Wenn man "SELECT feld1, f2, ... from ..." nutzt, dann ist umwandeln nicht erforderlich.
    mfg

    Kit
    www.ecofitonline.com
    DeskfIT - ChangefIT - XrefIT

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wofür hat man denn SQL um gerade einen Select * nicht zu verwenden ?
    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

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von kitvb1 Beitrag anzeigen
    IIRC, Wenn man "SELECT * from ..." in eine Programm nutzt, muss man auch dann dieses Programm umwandeln. Wenn man "SELECT feld1, f2, ... from ..." nutzt, dann ist umwandeln nicht erforderlich.
    Ein "Select *" ändert der Kompiler sowieso in ein "Select sp1, sp2, ..." um.
    Wenn du dann eine Spalte hinzufügst wird werden beide Varianten nur jene Spalten selektieren, die zur Kompile-Zeit vorhanden waren.
    Soll die neue Spalte im Programm auch selektiert werden, muss du so oder so das Programm neu umwandeln.
    (Das ganze gilt jetzt mal nur für Statisches SQL!!)

  7. #7
    Registriert seit
    Jan 2007
    Beiträge
    189
    I knew I should write it in english, I was concentrating too much on the German

    If you use "select *" with "into" then you will most likely need to recompile. This, if you are not using a referenced DS.

    But, if you are using something like "select count(*)" then you will not need to recompile.
    mfg

    Kit
    www.ecofitonline.com
    DeskfIT - ChangefIT - XrefIT

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von kitvb1 Beitrag anzeigen
    I knew I should write it in english, I was concentrating too much on the German

    If you use "select *" with "into" then you will most likely need to recompile. This, if you are not using a referenced DS.

    But, if you are using something like "select count(*)" then you will not need to recompile.
    Du solltest mal ein Test-PGM erstellen, wenn du mir nicht glaubst
    1. Die Externe-DS wird nicht zur Laufzeit erstellt, sondern zum Zeitpunkt der Umwandlung!
    2. Ich selbst habe vor 1/2 Jahr ein Testpgm geschrieben, wo ich genau DAS herausfinden wollte. Ergebnis: Ein Select * wird in ein Select sp1, sp2, ... umgewandelt.
    Das gleiche hast du ja auch wenn du eine View mit Select * erstellst. Wenn du dann mit DSPFD MYVIEW1 das View anschaust, wirst du von deinem Select * nicht viel finden, sondern vielmehr eine Aufschlüsselung der Spalten.

    lg

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    ... es ist schon klar, dass SELECT * intern aufgelöst wird!

    Das Problem, auf das Kit hinweisen möchte, tritt beim Fetch oder beim Select into auf!

    Werden die Daten in eine (externe) Datenstruktur basierend auf der Datei oder View ausgegeben, muss bei einer Änderung (der Tabelle oder View), bei der Felder/Spalten hinzugefügt, gelöscht oder verändert werden, das Programm neu kompiliert werden, damit in RPG der Datei-Aufbau erneut korrekt übernommen wird.

    Wird in einer Tabelle oder View lediglich ein Feld am Ende hinzugefügt ist bei LVLCHK(*NO) eine erneute Kompilierung nicht notwendig.

    Ein SELECT * sollte jedoch bei der Arbeit im (embedded) SQL soweit möglich vermieden werden.
    Hierfür gibt es zwei Gründe:
    1. Der erste wurde gerade lange und breit diskutiert, d.h. werden Felder/Spalten direkt ausgewählt, ist bei Datei-Erweiterung eine Kompilierung der Programme nicht erforderlich.
    2. Der zweite Grund ist Performance. Im Gegensatz zu RPG bei dem immer der ganze Satz gelesen werden muss, werden bei SQL nur die Daten, die auch angefordert werden zurückgegeben. Werden die gewünschten Daten eingeschränkt, sind weniger Zugriffe auf die Datenbank erforderlich und müssen weniger Daten in den Speicher geladen 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

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Letzteres bezweifle ich da eher.
    Wenn man sich die Aufrufhierarchie bis hin zur PF ansieht, wird beim Lesen/Schreiben ein interner Satzpuffer verwendet der immer den kompletten Satz beinhaltet.
    Auch SQL muss letztlich die nativen File-IO's verwenden, die auch HLL's verwenden.
    Was gespart wird, sind letztlich die Moves zwischen Filepuffer und Datenfeld, wobei diese sich bei SQL sogar erhöhen da der Move zwischen den automatisch generierten SQLxxx-Variablen und den Hostvariablen noch hinzu kommt.

    Wenn ich in RPG eine Datei verarbeite und die Felder nicht zusätzlich als DS definiere, werden auch nur die verwendeten Felder zwischen Puffer und Feld bewegt.

    Wenn man dann also letztlich SQL mit RPG oder sogar COBOL vergleicht, so ist COBOL im Microsekundenbereich halt immer noch am schnellsten, da hier letztlich mit dem internen IO-Puffer gearbeitet wird und zusätzliche Moves vermieden werden.

    SQL hat letztlich den großen Vorteil, dass man hier halt Zugriffslogiken in die Datenschicht verlegt und sich das Leben insbesonders bei Massenverarbeitung oder komplexen Gruppierungen/Summen oder sonstigen Berechnungen erleichtern kann.
    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

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    @Birgitta: Was das ursprungsthema betrifft, ist es klar, wenn Felder entfernt oder geändert werden, dass das PGM neu umgewandelt werden muss. Hier gings nur ums Hinzufügen und da ist ein neu umwandeln (wie du eh geschrieben hast) nicht notwendig. Ist aus der Diskussion vielleicht nicht ganz herauszulesen.

    @Spaltenauswahl: In bestimmten Fällen verwende ich auch kein Select * sondern wähle die Spalten direkt aus die ich benötige, da wenn ein Index existiert, in dem diese Spalten als Key-Felder vorhanden sind, ersparrt sich die DB ein Index Probe.
    Die Datenbank muss dann nicht auf die PF zurückgreifen, da alle Infos in der LF vorhanden ist. (--> Index Access Only)
    Und das sparrt bei großen und komplexen Abfragen vieeel Zeit!

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Index-Access-Only heißt, dass alle Felder des Select's Bestandteil des Index sind.
    Fehlt nur ein Feld, muss trotzdem auf die PF zugegriffen werden.
    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

Similar Threads

  1. per SQL Feld ändern...
    By svente in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 23-01-07, 09:49
  2. update per sql
    By steven_r in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-09-06, 08:22
  3. Kopieren per SQL
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 18-07-06, 09:36
  4. sql num. Feld formatieren
    By rr2001 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-07-06, 14:10
  5. Teildateien per SQL auflisten
    By Nennewitz in forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 28-06-06, 13:49

Berechtigungen

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