[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... das storage model ist eine Eigenschaft eines *PGM/*SRVPGM, kann also nicht beim erstellen eines Moduls angegeben werden. Die RNF0376 kommt bei der Erstellung des modules, lässt sich also nicht mit stgmdl *TERASPACE toppen.
    Was ist denn an der RPG Logik so wertvoll, dass man das nicht gleich im Java macht? Da gibt es so schicke Sachen wie Hibernate und Co., die den data access in Jave dem ganzen RPG Gerödel haushoch überlegen machen.

    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/

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Warum baut man Wrapper um bestehende RPG-Schnittstellen, die bekannte Parameter haben man sich aber um die enthaltene Logik nicht mehr kümmern muss oder mangels Quellen nicht verfügbar ist?
    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
    Jan 2006
    Beiträge
    112
    Hallo,

    ich habe mir einen kleinen Test zusammengeschustert:

    Nachfolgend das SQLRPGLE - in den Compilersettings wird der Cursor mit *ENDMOD geschlossen:

    Code:
          * CREATE PROCEDURE PGM/SRL_TSTX6(IN MANDANT CHAR ( 3))                                        
          * RESULT SETS 1 NOT                                                                           
          * DETERMINISTIC READS SQL DATA EXTERNAL NAME PGM/SRL_TSTX6                                   
          * PARAMETER STYLE GENERAL    
                                                                     
         H DFTACTGRP(*NO) ACTGRP(*CALLER)                                                               
         d aDate           s               d   datFmt(*ISO) inz(D'2010-12-07')                          
         d dayNumber       s             10i 0                                                          
         d dayName         s             10a                                                            
          /free                                                                                         
           exec SQL Set Option Commit=*NONE, Naming=*SYS;                                               
           exec SQL declare global temporary table temp_daynames                                        
                   (day_number integer, day_Name varchar (9)) ;                                         
                                                                                                        
           exec SQL insert into temp_daynames                                                           
                        values(1, 'Monday'), (2, 'Tuesday'), (3, 'Wednesday'),                          
                              (4, 'Thursday'), (5, 'Friday'), ('6', 'Saturday'),                        
                              (7, 'Sunday');                                                            
           exec SQL values dayOfWeek_ISO(:aDate) into : dayNumber ;                                     
                                                                                                        
           EXEC SQL Declare CustCsr cursor for                                                          
                   SELECT * FROM temp_daynames;                                                         
           EXEC SQL Open CustCsr;                                                                       
           EXEC SQL SET RESULT SETS for Return to Client                                                
                    Cursor CustCsr;                                                                     
           return;                                                                                      
         C                   EVAL      *INLR = *ON
    Und das Java-Programm:

    Code:
    @Test
        public void temporaryTable()
        {
            try
            {
                CallableStatement callableStmt = AS400_Anmeldung.getConnection().prepareCall("CALL PGM.SRL_TSTX6(?)");
                callableStmt.setString(1, "100");
                ResultSet rSet = callableStmt.executeQuery();
                while (rSet.next())
                {
                    String dayName = rSet.getString(rSet.findColumn("day_Name"));
                    System.out.println(dayName);
                }
            } catch (final Exception ex)
            {
                System.out.println(ex);
            }
        }
    Nur leider kommt es zu einer Exception (java.sql.SQLException: Cursor state not valid.).

    Wo ist der Haken? Habe ich etwas übersehen?

    Gruß und schönes Wochenende
    BM

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Vielleicht darfst du nicht den *INLR auf *ON setzten, sondern muss *OFF bleiben.

    lg Andreas

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... ILE ist der LR wurscht, close bei *ENDMOD schließt den Cursor und ein geschlossener Cursor lässt sich nicht fetchen.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das STGMDL kann (und muss) auf Modulebene bereits angegeben werden.
    Der Default ist hier *INHERIT.
    Beim CRTPGM können nur Module mit gleichen STGMDL bzw. INHERIT gebunden werden.
    In einer ACTGRP kann auch nur 1 STGMDL aktiv sein.

    Willst du den Compiler austrixen musst du ggf. mittels %ALLOC Speicher anlegen und die Elemente einzeln per Verschiebe-Pointer bearbeiten.
    Wenn das Programm noch mal aufgerufen wird, musst du vorher den Speicher wieder freigeben, da du ansonsten ein sog. Memory-Leak erstellst dass im Zweifel, wenn der Systemspeicher nicht mehr ausreicht, zum Herunterfahren der Maschine zwingt.

    Ansonsten:
    SET RESULT SETS for Return to CALLER

    TO CALLER

    Specifies that the cursor can return a result set to the caller of the
    procedure. For example, if the caller is a client application, the result set is
    returned to the client application.

    TO CLIENT
    Specifies that the cursor can return a result set to the client application.
    This cursor is invisible to any intermediate nested procedures. If a function
    or trigger called the procedure either directly or indirectly, result sets
    cannot be returned to the client and the cursor will be closed after the
    procedure finishes.
    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
    Mar 2002
    Beiträge
    5.365
    ... das geht aber wieder erst ab V7, vorher gab es den Parameter nicht. Für den Heap bringt das was, ob das aber die Grenzen des Compilers aushebelt wäre noch zu verifizieren.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich denke auch, dass hier SQL der Bremser ist und mit Teraspace nicht zurechtkommt.
    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
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich denke auch, dass hier SQL der Bremser ist und mit Teraspace nicht zurechtkommt.
    ... auf mich kann sich das "auch" nicht beziehen. Die RNF0376 bezieht sich auf die gesamte DS und besagt, dass kein Speicherelement (variablle, DS,... ) größer als 16773104 Byte sein kann und das steht in der V7 RPG Reference immer noch als restriction drin.

    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/

  10. #10
    Registriert seit
    Jan 2006
    Beiträge
    112
    Moin,

    ich hab gerade den "return to caller" ausprobiert - leider kommt es hier zur gleichen Exception.

    Kann jemand das Beispielprogramm vielleicht bei sich testen (siehe Post #11)? So auf den 1. Blick sehe ich keinen "offensichtlichen" Fehler.

    Danke und Gruß
    BM

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    ich habe jetzt deine Sourcen 1:1 (bis auf die java connection) übernommen und getestet.
    Bei mir (7.2 & Java 8) funktioniert es einwandfrei.

    lg Andreas

Berechtigungen

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