[NEWSboard IBMi Forum]
Seite 2 von 3 Erste 1 2 3 Letzte
  1. #13
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Scotts Beispiele aus dem Link beschränken sich da auf 1 Satz per Values, was einem "select blabla into .... from ..." entspricht.
    Wenn ein SET-Statement in Verbindung mit einem SELECT-Statement ausgeführt wird, muss genau eine Zeile zurückkommen. Das war die Ausgangssituation!

    Wenn man das Ganze dynamisch machen möchte bzw. muss (weil die Tabelle oder Bibliothek flexibel gehalten werden müssen), kann man entweder
    • ein VALUES ... INTO Statement dynamisch zusammensetzen und dann mit PREPARE und EXECUTE ausführen, wie es AG1965_2 gezeigt hat oder
    • Verwendet einen Cursor, d.h. man bildet das dynamische SELECT-Statement, konvertiert dieses in ein ausführbares SELECT-Statement (PREPARE). Das konvertierte SELECT-Statement wird dann in das DECLARE-Statement eingebunden und danach folgt der übliche Verlauf, d.h. der Cursor muss geöffnet werden (OPEN), der einzelne/erste Datensatz gelesen werden (FETCH) und dann muss der Cursor wieder geschlossen werden (CLOSE).


    Weder SET noch SELECT ... INTO können in Verbindung mit dynamischem verwendet werden.

    Die Frage ist nur, warum sollte man an dieser Stelle 5 SQL-Statements ausführen, wenn man stattdessen mit 2 Statements auskommen kann?
    Nein, ich habe mich nicht verzählt, das SQL-Statement kann auch direkt im PREPARE zusammengesetzt werden!

    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

  2. #14
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... das ist einfach zu beantworten:
    values into ist kein SQL Standard, zudem ist die standard Version mit cursor im Fehlerfall einfacher zu behandeln - sprich defensiver. Das ist Dir aber vermutlich egal, Du empfiehlst ja auch naming *sys, commit(*none) und Datenschrank Verarbeitung nach LIBL - ich empfehle halt was anderes, lass doch jeden selbst entscheiden.

    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/

  3. #15
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von BenderD Beitrag anzeigen
    Das ist Dir aber vermutlich egal, Du empfiehlst ja auch naming *sys, commit(*none) und Datenschrank Verarbeitung nach LIBL - ich empfehle halt was anderes, lass doch jeden selbst entscheiden.
    Ist ja wieder einmal amüsant zu lesen.
    Birgittas Empfehlungen basieren so gut wie immer auf den jeweiligen Anforderungen.
    Und ja, wenn ein Unternehmen noch niergends Commit im Einsatz hat, dann empfehle ich nicht bei einer kleinen Anpassung dies gleich zu verwenden. Da gehört vorher ein überlegtes Design her (auch fürs Testen).

    Genauso könnte man behaupten, dass Dieter empfiehlt alles bestehende weg zu schmeißen und neu zu entwickeln und das am besten mit einer "richtigen" DB und einer "richtigen" Programmiersprache.

  4. #16
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... set, values into und select into ohne commit sind klassische Kunstfehler. Gerade wenn man commit umgehen will, geht ohne cursor nur dirty read...

    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. #17
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nun, die Ausgangssituation beschränkte sich eben nicht auf die reine Set-Anweisung sondern auf die variable Bibliothek. Nun lassen sich eben Tabellen und Libnamen nicht per "?" angeben was wiederum zu dynamischem SQL führte.

    Jedoch "das SQL-Statement kann auch direkt im PREPARE zusammengesetzt werden" stimmt zwar, aber ich prüfe das Ergebnis gerne in einer Variablen.

    Und was die Anzahl der SQL's angeht so ist die letztlich egal (sind nur Speicherzugriffe), da eine VALUES-Anweisung implizit auch nichts anderes als Open/Fetch/Close machen kann.
    Und ob nun commit oder nicht das soll wirklich jeder selber entscheiden.
    Schließlich will man ja an Recoveryprozeduren auch noch verdienen;-).

    Ansonsten vielen Dank an Birgitta die mit ihren Ausführungen die vorherigen Beiträge bestätigte.
    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. #18
    Registriert seit
    Apr 2012
    Beiträge
    360
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Wenn ein SET-Statement in Verbindung mit einem SELECT-Statement ausgeführt wird, muss genau eine Zeile zurückkommen. Das war die Ausgangssituation!

    Wenn man das Ganze dynamisch machen möchte bzw. muss (weil die Tabelle oder Bibliothek flexibel gehalten werden müssen), kann man entweder
    • ein VALUES ... INTO Statement dynamisch zusammensetzen und dann mit PREPARE und EXECUTE ausführen, wie es AG1965_2 gezeigt hat oder
    • Verwendet einen Cursor, d.h. man bildet das dynamische SELECT-Statement, konvertiert dieses in ein ausführbares SELECT-Statement (PREPARE). Das konvertierte SELECT-Statement wird dann in das DECLARE-Statement eingebunden und danach folgt der übliche Verlauf, d.h. der Cursor muss geöffnet werden (OPEN), der einzelne/erste Datensatz gelesen werden (FETCH) und dann muss der Cursor wieder geschlossen werden (CLOSE).


    Weder SET noch SELECT ... INTO können in Verbindung mit dynamischem verwendet werden.

    Die Frage ist nur, warum sollte man an dieser Stelle 5 SQL-Statements ausführen, wenn man stattdessen mit 2 Statements auskommen kann?
    Nein, ich habe mich nicht verzählt, das SQL-Statement kann auch direkt im PREPARE zusammengesetzt werden!

    Birgitta
    Hallo,

    hätte eine Frage dazu:
    Ich bekomme bei folgenden Statement SqlCde=-305 SqlStt=22002(Anzeigervariable erforderlich) zurück.
    In der Datenbank gibt es keinen Satz dazu.


    VALUES(SELECT P_NAME FROM PERSONP
    WHERE P_PENR = 58392 ) INTO ?

    Wie müsste mein Statement aussehen das ich den Fehler abfange?

    Danke
    Tarki

  7. #19
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Wenn eine Indikator-Variable verlangt wird bedeutet das, dass ein NULL-Wert zurückgegeben wird. Indikator Variablen werden mit Int(5) definiert und beim Execute unmittelbar nach der Ausgabe-Variablen nur durch ein Komma getrennt angegeben.

    Sofern ein NULL-Wert ausgegeben wird, wird die Indikator-Variable mit -1 ausgegeben, was dann im Anschluss geprüft werden kann.

    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

  8. #20
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Zitat Zitat von BenderD Beitrag anzeigen
    ... das ist einfach zu beantworten:
    values into ist kein SQL Standard, zudem ist die standard Version mit cursor im Fehlerfall einfacher zu behandeln - sprich defensiver. Das ist Dir aber vermutlich egal, Du empfiehlst ja auch naming *sys, commit(*none) und Datenschrank Verarbeitung nach LIBL - ich empfehle halt was anderes, lass doch jeden selbst entscheiden.

    D*B
    Dieter,

    Ich hab' langsam die Schnautze voll!
    Was sollen diese ständigen Angriffe!
    Jedes Mal wenn ich etwas schreibe, versuchst Du mir mit unqualifizierten und unwahren Behauptungen an den Karren zu fahren.

    Ich gehe von der Ausgangssituation aus und die ist hier nun mal so, dass viele weder unter Commit fahren und außerdem Ihre Daten in unterschiedlichen Bibliotheken hinterlegt haben.

    SELECT ... INTO und VALUES ... INTO generieren beide im Untergrund einen Cursor, Öffnen diesen, Lesen den ersten Satz und schließen den Cursor wieder. Warum also 5 Statements schreiben, wenn es auch 2 tun. Im Fehlerfall wird jeweils ein SQLCODE (oh' Verzeihung ist ja nicht Standard!!!) und ein SQLSTATE ausgegeben, die abgeprüft werden können.

    Desweiteren bin ich mit Sicherheit die letzte, die COMMIT *NONE empfiehlt. Gerade Journaling und Commitment-Control ist eines der Themen, die ich grundsätzlich empfehle!

    Was die Namenskonventionen angeht, so überlasse ich das jedem selber. NUR sollte man wissen welche Konsequenzen dahinter stecken, wenn man statt System- SQL-Naming verwendet. Das erkläre ich auch immer und das ist weit mehr als das Trennkennzeichen zwischen Schema und Objekt (wobei beim System-Naming inzwischen auch der Punkt als Trennzeichen verwendet werden kann).

    Ich denke das war jetzt wohl endgültig das letze Mal, das ich in diesem Forum irgendetwas gepostet habe.

    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

  9. #21
    Registriert seit
    Aug 2001
    Beiträge
    2.644
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Ist ja wieder einmal amüsant zu lesen.
    Deshalb sind wir ja hier. Und irgendwann machen wir das mal mit den Protagonisten in einer Live-Session mit Snacks und Bier

    -h
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  10. #22
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Übrigens: Indicator-Variablen werden direkt ohne Komma angegeben:
    : V1 : I1, : V2 : I2, ...

    Ausnahme: Das Ziel ist eine DS, dann folgt ohne Komma ein Indicator-Array, das mindestens so viele Elemente wie Ausgabevariablen haben muss.
    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. #23
    Registriert seit
    Apr 2012
    Beiträge
    360
    Morgen Frau Hauser,

    ich lese Ihre Post immer sehr gerne, da sie für mich mit viel Wissen gespickt ist.
    Ich wollte es nur erwähnen, da man in der heutigen Zeit meist das Positive, bzw. was man an Personen schätzt, nicht mehr ausspricht.

    Ich würde Sie aufrichtig vermissen.

    lg

  12. #24
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nur wenn man mit ein paar Antworten nicht zufrieden ist sollte man nicht gleich die Flinte ins Korn werfen. Es gibt halt immer wieder Meinungsverschiedenheiten und die AS/400 ist flexibel genug, verschiedene Lösungen auszuhalten.
    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. FUJIFILM Imaging Germany, GEWA music und die Igepa group setzen auf AS400 Software
    By Rhenania Computer in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 31-08-16, 16:38
  2. security level auf 40 setzen
    By dibe in forum IBM i Hauptforum
    Antworten: 19
    Letzter Beitrag: 21-12-15, 23:48
  3. Cursorposition setzen
    By thluetjen in forum IBM i Hauptforum
    Antworten: 13
    Letzter Beitrag: 31-01-08, 11:21
  4. Variable
    By Henrik Motzkus in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-03-02, 10:13
  5. High Tech-Unternehmen setzen weiter auf i2
    By W.Steiner in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 05-07-01, 10:55

Berechtigungen

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