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

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    c/exec sql
    c+ set option closqlcsr=*endmod
    c/end-exec

    neben weiteren Optionen wie:
    commit=*none -- wenn ohne Transaktionen gearbeitet wird
    datfmt=*iso -- um sicherzustellen, das Datum-Felder 10-stellig verwendet 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

  2. #2
    Registriert seit
    Sep 2005
    Beiträge
    79
    Zitat Zitat von Fuerchau
    c/exec sql
    c+ set option closqlcsr=*endmod
    c/end-exec

    neben weiteren Optionen wie:
    commit=*none -- wenn ohne Transaktionen gearbeitet wird
    datfmt=*iso -- um sicherzustellen, das Datum-Felder 10-stellig verwendet werden
    Super, das war´s. Viiiiielen Dank!
    Verstehen tu ich´s aber nicht. Im 1. Schleifendurchlauf schließt der close und im 2. nicht mehr. Und was hat das ganze mit einem Datum zu tun?

  3. #3
    Registriert seit
    Apr 2002
    Beiträge
    792
    das Datum hat nichts mit dem Cursor zu tun. Sind das denn immer andere Select-Statements die du da verarbeitest???

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    79
    Zitat Zitat von JonnyRico
    das Datum hat nichts mit dem Cursor zu tun. Sind das denn immer andere Select-Statements die du da verarbeitest???
    Nein! "select * from FILE where ALPHAFELD=?"
    In den Schleifendurchläufen wird jeweils ein anderer Inhalt dieses Feldes abgefragt.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dass der Cursor offen bleibt, hat intern was mit Optimierungen zu tun.
    Du kannst deine SQL's beschleunigen wenn du statische SQL's verwendest:

    declare Filecursor cursor for
    select * from FILE where ALPHAFELD=:MYFIELD

    MYFIELD wird einfach als RPG-Feld definiert.
    Damit sparst du dir den Prepare.
    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
    Sep 2005
    Beiträge
    79

    Thumbs up

    Besten Dank.

    Dann will ich euch mal nicht weiter aufhalten. Den Tipp mit dem statischen SQL und dem variablen Inhalt wird ich im nächsten Teil testen.

  7. #7
    Registriert seit
    Sep 2005
    Beiträge
    79
    Zitat Zitat von Fuerchau
    Dass der Cursor offen bleibt, hat intern was mit Optimierungen zu tun.
    Du kannst deine SQL's beschleunigen wenn du statische SQL's verwendest:

    declare Filecursor cursor for
    select * from FILE where ALPHAFELD=:MYFIELD

    MYFIELD wird einfach als RPG-Feld definiert.
    Damit sparst du dir den Prepare.
    Deinen Vorschlag auf statisches SQL zurückzugreifen hab ich versucht:
    declare Filecursor cursor for Filesection
    open Filecursor
    SQLCOD = -514 (kein prepaire durchgeführt) !?

    Andere Frage noch:
    In der SELECT-Anweisung wurden 2 Tabellen mit LEFT JOIN verbunden.
    Jedes Dateifeld einzeln anzusprechen find ich bei großem Umfang nervig. Deshalt "*" und INTO in die externe DS, die ich mit der DDS beschrieben habe. Was aber wenn ich nun 2 Tabellen anspreche?

  8. #8
    Registriert seit
    Apr 2002
    Beiträge
    792
    Hi Armin,

    das was du da gemacht hast ist ja eher dynamisch als statisch.

    Dynamisch:
    PHP-Code:
    SQLStat 'Select Kunde From Kundenstamm Where Nummer = ' VarKDNR 

    Prepare DynSQL From SQLStat

    Declare MyCur for DynSQL

    Open MyCur 

    Statisch:
    PHP-Code:

    Declare MyCur for 
    Select Kunde From Kundenstamm Where Nummer = :VarKDNR

    Open MyCur 
    Gruß

    Sascha

  9. #9
    Registriert seit
    Sep 2005
    Beiträge
    79
    Danke Sascha,
    nachdem ich noch CURSOR eingefügt habe, wandelt der Precompile um.
    Declare MyCur CURSOR for DynSQL
    Jetzt bekomm ich aber den SQLCOD -501. Cursor wurde nicht geöffnet!?

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Andere Frage noch:
    In der SELECT-Anweisung wurden 2 Tabellen mit LEFT JOIN verbunden.
    Jedes Dateifeld einzeln anzusprechen find ich bei großem Umfang nervig. Deshalt "*" und INTO in die externe DS, die ich mit der DDS beschrieben habe. Was aber wenn ich nun 2 Tabellen anspreche?
    Dann definierst Du halt für jede Datei eine Datenstruktur und gibst sie beide beim Fetch an. Für die zweite Datei solltest Du außerdem eine Datenstruktur mit Indikator-Variablen verwenden, um festzustellen, ob NULL-Werte übertragen wurden.
    PHP-Code:
    C/EXEC SQL  Fetch CsrC1 into :DSFile1, :DSFile2 :DSIndFile2
    C
    /END-EXEC 
    Auch wenn es dir "nervig" erscheint Felder auszuwählen, SELECT * ist Gift für die Performance. Werden nur einzelne Felder ausgewählt können in einem Block wesentlich mehr Informationen eingelesen 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

  11. #11
    Registriert seit
    Sep 2005
    Beiträge
    79
    Danke Hr. Hauser für die Info.
    Hat auch soweit geklappt. Nur die 3. DS übersteigt mein Verständnis.
    Wie muss diese def. werden? Sollte es in der 2. Tabelle keinen passenden Satz geben würde die 2. DS nicht mit Blanks bzw. Nullen init.?

  12. #12
    Registriert seit
    Apr 2002
    Beiträge
    792
    Hi,

    also das könnte vielleicht daran liegen das ich mir bei dem o.a. Statement die Hochkommas geschenkt habe. Du müsstest bei der Variable die abfegragt wird noch '''' (für ein Hochkomma) vor und hinter der Variable einfügen.

    Zu der von Birgitta (übrigens Fr. Hauser) angesprochenen Sache. Dort handelt es sich um eine Anzeigervariable.

    d AnzVar 5I 0

    Du also machst:

    Fetch CsrC1 into :DSFile1, :DSFile2 :AnzVar

    so erhälst du in dem Feld AnzVar den Wert 0, wenn alles okay ist , -1 wenn die Abfrage NULL zurück gibt und -2 wenn dein Feld für den abgefragten Wert zu klein ist.

    Gruß

    Sascha

Similar Threads

  1. SQL Sensitiver Cursor Probleme
    By Rincewind in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-12-06, 13:58
  2. Embedded SQL in VARPG
    By Squall in forum NEWSboard Programmierung
    Antworten: 23
    Letzter Beitrag: 18-10-06, 12:01
  3. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. Character verbinden in Embedded SQL
    By e_sichert in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 03-05-06, 10:47

Berechtigungen

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