[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2002
    Beiträge
    1.121
    So, danke euch beiden.
    ich habe jetzt mal Eure Infos eingepflegt, und bin zu folgenden Funktionierenden Proggi gekommen:
    PHP-Code:
    d jahr            s              2s 0                  
    d qa              s              2s 0                  
    d anzahl          s              2s 0                  
                                                           
    c                                                      
    c
    /exec sql    Set Option SrtSeq = *LangIdShr           
    c
    /end-exec                                             
    c
    /exec sql    Declare Cursor1 Cursor  For              
    c+              Select Count(Distinct(rswoc)) as anzahl
    c
    +              from   grresp                          
    c
    +              where  rsjah = :jahr                   
    c
    +                and  rsqua = :qa                     
    c
    /end-exec                                             
    c
    /exec sql    Close Cursor1                            
    c
    /end-exec                                             
    c                   
    eval      jahr 07                
    c                   
    eval      qa   02                
    c
    /exec sql    Open  Cursor1  Using :jahr, :qa          
    c
    /end-exec                                             
    c
    /exec sql    Fetch  Cursor1 Into :anzahl  
    c
    /end-exec                                 
    c                                          
    c                   
    Eval      *inlr = *On 
    mir ist auch klar, das ich damit nicht den schönheitspreis gewinnen werde.

    @Birgitta
    Option CLOSQLCSR = *ENDMOD
    hatte ich eingebaut, da ich in einem Programm folgendes Problem hatte:
    Dynamisches SQL mit "Select * from kunden where name like 'K%'
    bei dem 2. Aufruf mit "Select * from kunden where name like 'S%' hatte ich dann keine Daten, weil er nur noch die Kunden mit "K" im Zugriff hatte. Darum habe ich halt die OPTION eingebaut.

    Gruß Ronald

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    In deinem Programm steht der Close noch an falscher Stelle (mit ODP's) hat das noch nichts zu tun.

    Wenn ein Select nur 1 Zeile als Ergebnis hat (bei count sehr wahrscheinlich) kannst du das noch abkürzen:

    Select Count(Distinct(rswoc)) into :anzahl
    c+ from grresp
    c+ where rsjah = :jahr
    c+ and rsqua = :qa

    Übrigens:
    Das "USING" beim Open wird ignoriert, da du beim Declare keine Parameter sonder Hostvariablen deklariert hast.
    Das Using kannst du dir dann schenken.

    Using ist dann erforderlich, wenn man sog. Parametermarker verwendet:

    "select ... where rsjah = ? and rsqua = ?".
    Diesen dann preparen und dann mit "open ... using ..." öffnen.
    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
    May 2002
    Beiträge
    1.121
    Danke,

    habe es jetzt noch eingekürzt.
    Das mit den Parametern habe ich dann glaube ich auch gefressen. Mache ich in Delphi mit durchgriff zur AS/400 ja eigentlich auch so in ähnlicher Form.

    Gruß Ronald

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    In deinem Programm steht der Close noch an falscher Stelle (mit ODP's) hat das noch nichts zu tun.
    Das Problem bei OPEN und CLOSE ist, dass ein Cursor nicht erneut geöffnet werden kann, wenn er bereits geöffnet ist. Da ein CLOSE eventuell auch mal vergessen wird, ist es am sichersten den Cursor unmittelbar vor dem OPEN (nochmals) zu schließen. War der Cursor zu dem Zeitpunkt geöffnet, wird er geschlossen, war er nicht geöffnet umso besser.

    Bei einem Soft- oder Pseudo-Close (also einem Close im embedded SQL oder in einer SQL-Stored Procedure oder User Defined Function) wird kein wiederverwendbarer ODP gelöscht. Ein Pseudo-Close bewirkt lediglich, dass die Daten in den temporären Objekten des ODP beim nächsten Open aktualisiert werden. Über die Compile-Option CLOSQLCSR wird definiert wann ein Hard Close erfolgen soll, also entweder beim Ende der Aktivierungsgruppe oder beim Ende eines Moduls. Je nachdem wie diese Option eingestellt ist, wird der ODP entweder beim Ende des Moduls oder beim Beenden einer Aktivierungsgruppe komplett gelöscht. Im Klartext heißt das, dass bei einem erneuten Aufruf die komplette Optimierung (Full Open) mit allen Konsequenzen erneut ausgeführt werden muss.

    @Ronald:
    Ich würde das ganze Programm noch wie folgt kürzen:
    PHP-Code:
    d jahr            s              2s 0                   
    d qa              s              2s 0                   
    d anzahl          s              2s 0                   
                                                            
    c                                                       
    c
    /exec sql    Set Option SrtSeq = *LangIdShr            
    c
    /end-exec                   
    C                   Clear     Anzahl  
    c                   
    eval      jahr 07                 
    c                   
    eval      qa   02                                 
    C
    /Exec SQL
    c
    +              Select Count(Distinct(rswoc)) 
    C+              Into :Anzahl 
    c
    +              from   grresp                           
    c
    +              where  rsjah = :jahr                    
    c
    +                and  rsqua = :qa                      
    c
    /end-exec                                              
                    
    c                   
    Eval      *inlr = *On 
    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. SQLRPG Debug
    By olbe in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 24-07-07, 14:48
  2. SQLRPG
    By muadeep in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 28-06-05, 13:17
  3. SQLRPG Angabe LIB als Paramater
    By procher in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 24-01-03, 16:59
  4. Dateifreigabe bei SQLRPG
    By Wiezorek in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 16-10-01, 12:03
  5. SQLRPG
    By Ursus in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 13-08-01, 07:05

Berechtigungen

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