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