[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2009
    Beiträge
    10

    SQL Anfänge: SENSITIVE CURSOR - For Fetch Only

    Hallo!

    Ich bin momentan dabei meine ersten kleinen Schritte mit SQL in RPGLE zu machen und habe dazu einige Fragen.

    Ich möchte SQL in meiner Protokollierungsanzeige verwenden, was auch soweit funktioniert, allerdings habe ich Probleme mir Datensätze anzeigen zu lassen die nach dem öffnen meines Cursor in die Tabelle hinzugefügt wurden.

    Falls ich alles richtig verstanden habe muss ich meinen Cursor als "SENSITIVE" definieren - in wie weit verlangsamt das meine Abfragen?

    Außerdem setze ich mir mein Select zusammen (in dem ein ORDER BY vorhanden ist) und führe anschließend folgendes aus:

    Code:
    C/Exec SQL                          
    C+      Prepare Sel_001 From :SqlStm
    C/End-Exec                          
    C/Exec SQL                                       
    C+      Declare Csr_001 Scroll Cursor for Sel_001
    C/End-Exec                                       
    C/Exec SQL                                       
    C+      Open Csr_001                             
    C/End-Exec
    Nun würde ich gerne den Cursor als "for fetch only" definieren, was mir allerdings nicht erlaubt wird.

    Code:
    Nachricht . . . :   Schlüsselwort FOR nicht erwartet. 
    liebe Grüße

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.931
    Hallo,

    1. Wo willst Du das FOR READ ONLY angeben?
    FOR READ ONLY ist Bestandteil des SELECT-Statements (und nicht des DECLARE-Statements) und muss deshalb in den String der PREPARED werden soll integriert werden.

    2. Ist das SQL statement wirklich dynamisch, d.h. werden unterschiedliche Spalten verwendet oder wechseln die Dateien/Tabellen bei den einzelnen Aufrufen.
    Wenn beides mit NEIN beantwortet werden kann, ist dynamsiches SQL NICHT erforderlich.
    Hostvariablen für unterschiedliche Selektionen und unterschiedliche Sortiertungen über CASE-Anweisungen sind beim statischen SQL möglich.
    Beim statischen SQL wird das SQL Statement zur Compile-Zeit geprüft und fällt nicht erst zur Laufzeit auf die Nase.

    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

  3. #3
    Registriert seit
    Sep 2009
    Beiträge
    10
    Guten Morgen!

    Herzlichen dank für die schnelle Antwort Fr. Birgitta.

    Zum Punkt 1:
    Schande über mein Haupt, ich war mir dessen nicht bewusst. Danke nochmals!

    Punkt 2:
    Da in der Protokollanzeige Filterungen möglich sind, setze ich mir den String bei Änderungen neu zusammen.

    (#HK = ')

    Code:
    SqlStm = 'Select * from TSTPROT where STATUS like ' + #HK + %trim(bsStatus) +  #HK + ' order by fNR DESC';
    Beim 1. Aufruf & falls mein Suchfeld leer ist befülle ich die Variable bsStatus mit '%'.

    Falls ich hier mist zusammen rede (was sehr gut möglich ist) bitte ich das zu entschuldigen.

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.368
    ... den like könnte man noch ganz gut auflösen (select ... where Feld like :HostVar) beim Order by kann man mit hinreichendem Releasestand auch mit Case Konstrukten noch was zusammen basteln.
    Mit dynamischem SQL ist man aber für solche Filterungen deutlich flexibler.
    Von den Vorteilen des statischen SQL bleibt ohnehin nur die Prüfung zur Compiletime, die Performance Vorteile fallen bei Case Konstrukten mit Order By in sich zusammen und sind ohnehin im praktischen Einsatz allenfalls marginal (kann sogar langsamer sein!!!)

    D*B

    Zitat Zitat von Curan Beitrag anzeigen
    Guten Morgen!

    Herzlichen dank für die schnelle Antwort Fr. Birgitta.

    Zum Punkt 1:
    Schande über mein Haupt, ich war mir dessen nicht bewusst. Danke nochmals!

    Punkt 2:
    Da in der Protokollanzeige Filterungen möglich sind, setze ich mir den String bei Änderungen neu zusammen.

    (#HK = ')

    Code:
    SqlStm = 'Select * from TSTPROT where STATUS like ' + #HK + %trim(bsStatus) +  #HK + ' order by fNR DESC';
    Beim 1. Aufruf & falls mein Suchfeld leer ist befülle ich die Variable bsStatus mit '%'.

    Falls ich hier mist zusammen rede (was sehr gut möglich ist) bitte ich das zu entschuldigen.
    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. SQL Sensitiver Cursor Probleme
    By Rincewind in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-12-06, 13:58
  2. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  3. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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