[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2004
    Beiträge
    470
    Uhh Birgitta, vielen Dank. Ich habe was ähnliches bereits im Internet an anderer Stelle gefunden aber das hat nicht so funktioniert. Ich probiere deines morgen gleich aus.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hier habe ich sogar noch einen Link zu einem Artikel in Deutsch! gefunden:
    Release 7.1 – Verarbeiten von Result Sets mit embedded SQL

    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
    May 2004
    Beiträge
    470
    @Birgitta Was ist der SpecificProcedureName
    Ich denke dass ist der normale StoredProcedure Name

  4. #4
    Registriert seit
    May 2004
    Beiträge
    470
    Ich habe alles soweit gemacht. Bekomme aber jetzt den SQLCOD -501.
    Im Joblog sagt er dass er die Datei (sehr langer Name) nicht findet.
    Über WRKOBJ sehe ich nur die 10-stelligen Systemnamen. Kann es sein dass ich irgendwo noch was angeben muss und das der lange Name eventuell das Problem ist ?

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Da Prozeduren überladen werden können, d.h. die gleiche Prozedur (bzw. gleicher Prozedur-Name) jedoch mit einer unterschiedlichen Anzahl von Parametern kann in der gleichen Bibliothek mehrfach vorhanden sein. Um an dieser Stelle auch die richtige Prozedur aufzurufen verwendet man den spezifischen (eindeutigen) Namen der Prozedur, alternativ kann man and dieser Stelle aber auch die Parameter-Definition angeben.
    Wenn es nur eine einzige Stored Procedure (mit dem gleichen Namen) gibt, kannst Du an dieser Stelle auch den Namen der Stored Procedure angeben.

    SQL-Code -501 bedeutet, dass der Cursor nicht geöffnet ist.

    Wenn Du die Stored Procedure aus ACS (Access Client Solutions) - Run SQL Skript (oder auch mit Client Access) mit dem SQL-Befehl CALL aufrufst, bekommst Du dann eine Ergebnis-Tabelle angezeigt oder erhältst Du eine Fehlermeldung?

    Wo genau (nach welchem Statement) erhälst Du den SQLCODE -501?

    Um ein Result-Set auszugeben, muss der entsprechende Cursor in der Stored Procedure geöffnet werden und darf vor Ende der Prozedur nicht mehr geschlossen werden. (Das machst Du nämlich dann in Deinem Verarbeitungs-Programm).
    Ich vermute der Programmierer hat entweder nur den Cursor definiert (darauf können wir nicht zugreifen) und nicht geöffnet (dann können wir das Result-Set verarbeiten).
    Oder er hat den Cursor geöffnet, aber sicherheitshalber vor dem Ende der Prozedur wieder geschlossen.

    Im übrigen solltest Du mit ACS (Access Client Solutions) Datenbank - Schemas und/oder Run SQL Script arbeiten. Mit ACS Schemas kannst Du Dir alle Datenbanken-Objekte anschauen, hier siehst Du auch die langen System und kurzen SQL-Namen.
    Mit Run-SQL Script (ich hab' nur die Englische Version) führst Du SQL-Statements aus. Bei der aktuellen Version gibt es keine Ausrede mehr, warum STRSQL (das bereits seit Release V4R5 stabilisiert ist) verwendet werden sollte.

    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Mittels DSPFD kann man auch den Alias-Namen sehen.
    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

  7. #7
    Registriert seit
    May 2004
    Beiträge
    470
    Ich glaube die Datei existiert tatsächlich nicht. Das ist wieder so ein Berechtigungsproblem ... vielleicht. Ich weiß nicht warum die das so kompliziert machen müssen. Um nicht viele Prozeduren machen zu müssen habe die eine Prozedur gemacht die aus einer Datei das SQL Statement holt und dieses dann ausführt und das Ergebnis zurück gibt. Somit sind fast alle Felder auch varchar(250). Ich weiß das hat mit meinem Problem nichts zu tun, macht es aber nicht einfacher.
    Er bringt beim CALL auf der AS400 direkt dass er die Datei nicht findet.

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Welchen CALL meinst du denn?
    Hast du Birgittas Vorschlag mal angenommen und den Call auf die Prozedur von ACS oder falls noch nicht installiert mit Operations Navigator durchgeführt?
    Kann dir nicht derjenige, der die Prozedur zur Verfügung stellt, ein Beispiel für das Erhalten der Daten bereitstellen?

    Auch wenn es ungern gesehen wird:
    Klappt der Aufruf mit STRSQL und du siehst Daten?
    Wenn Ja, dann gibts noch die Umgehung mit QMQRY.
    Da kannst du die Daten der Prozedur in eine Datei ausgeben und dann verarzten.
    Das tut zwar manchen in den Augen weh, mag aber funktionieren.
    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
    May 2004
    Beiträge
    470
    Aktuell funktioniert es soweit dass ich was zurück bekomme. Probleme machen noch die Null-Felder ich muss noch die Null-Felder-Variablen empfangen.
    Mit Einzelfelder hatte ich da bisher keine Probleme jetzt bekomme ich aber eine DS zurück

    d DsWR ds
    d Row_Key 250
    d Commission_Number...
    d 250
    d Commission_Number_Year...
    d 250
    d Vin 250
    d Invoice_Number...
    d 250

    Wie muss ich die Null-Variablen definieren ?
    als eigene DS mit je einem Null-Feld je Feld oder muss ich die einzelenen Nullfelder in die gleiche DS hinter die Felder machen ?

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Du must eine Datenstruktur definieren mit sovielen Elementen wie Spalten und diese Feldgruppe dann nach der Datenstruktur getrennt durch ein Blank angeben.

    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
    May 2004
    Beiträge
    470
    Ich habs gefunden. Es funktioniert jetzt alles.

    Für alle die es interessiert. Nachfolgend meine Quellenzusammenfassung

    Code:
    d rsWR            s                   sqltype(result_set_locator)         
    d DsWR            ds                                                      
    d   Row_Key                    250                                        
    d   Commission_Number...                                                  
    d                              250                                        
    d   Commission_Number_Year...                                             
    d                              250                                        
    d   Vin                        250                                        
    d   Invoice_Number...                                                     
    d                              250                                        
    d   Invoice_Date...                                                       
    d                              250                                        
    d   Amount                     250                                        
    d   Currency                   250                                        
    d   Invoicing_Dealer...                                                   
    d                              250                                        
    d   Sales_Category...                 
    d                              250                                         
    d   CDC_Valid_From...                                                      
    d                                9  0                                      
    d   CDC_DelFrom...                                                         
    d                                9  0                                      
    d myNulls         s              5i 0 dim(12)   
    ***************************************************************************
    ** Hauptprogramm                                                           
    ***************************************************************************
    c/exec sql                                                                 
    c+ call EXP.P_REQUEST_SST('NCONS', 'XXX', 'VERSAND',     
    c+ 0, 0, '', 0, 0)                                                         
    c/end-exec                                                                 
    c/exec sql                                                                 
    c+ ASSOCIATE RESULT SET LOCATOR(:rsWR) with specific procedure             
    c+ P_REQUEST_SST                                                           
    c/end-exec                                                                 
    c/exec sql                                                                 
    c+ ALLOCATE cWR CURSOR FOR RESULT SET :rsWR                                
    c/end-exec                                                                 
    c                   do        *hival                                       
    c/exec sql                                                                 
    c+ FETCH NEXT FROM cWR into :DsWR:myNulls                                  
    c/end-exec                                                                 
    c                   if        SqlCod = 100 or SqlCod < *zeros              
    c                   leave          
    c                   endif                                                  
    **                                                                         
    c                   enddo                                                  
    c/exec sql                                                                 
    c+ CLOSE cWR                                                               
    c/end-exec                                                                 
    **                                                                         
    c                   eval      *inlr = *on
    An die Prozedur selbst komme ich leider nicht ran. Aber so wie oben funktioniert es im RPG

  12. #12
    Registriert seit
    May 2004
    Beiträge
    470
    Vielen Dank an alle für die Unterstützung

Similar Threads

  1. Aufruf SQL Prozedur von SQLRPGLE
    By Dschainers in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 28-08-19, 11:09
  2. Embedded SQL Cursor updaten
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 23-10-16, 19:12
  3. RPG-Prozedur aus C# aufrufen
    By svit in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 03-03-16, 11:11
  4. telnet - rückgabe im ebcdic
    By sargejogi in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 22-09-15, 12:09
  5. CLLE als Prozedur ins Serviceprogramm
    By Etherion in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 30-09-14, 13:36

Berechtigungen

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