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

Hybrid View

  1. #1
    Registriert seit
    Jun 2004
    Beiträge
    86

    Feld per SQL hinzufügen!

    Servus,

    gibt es eine Möglichkeit per SQL einer bestehenden Datei ein oder mehrere Felder hinzuzufügen?

    Danke und Gruß.

    Svente

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.700
    Per SQL geht das nur auf Tabellen, die auch mit SQL erstellt wurden:

    alter table mytable add Fieldxxx ...
    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
    Die ist leider nicht mit SQL erstellt worden.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.929
    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.700
    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

  6. #6
    Registriert seit
    Jun 2004
    Beiträge
    86
    Danke für die Tips. Mit ALTER TABLE hat es geklappt.

  7. #7
    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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.700
    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

  9. #9
    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!!)

  10. #10
    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

  11. #11
    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

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.929
    ... 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

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
  •