ibmi-brunch-learn

Announcement

Collapse
No announcement yet.

Problem with Stored Proc -> Returning DEC (11, 4) Out Parameter to JDBC

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem with Stored Proc -> Returning DEC (11, 4) Out Parameter to JDBC

    Hi folks,

    i have a working Stored Procedure. My problem is how to use the out parameter with dec(11,4) in jdbc?

    The Stored Procedure:

    Code:
    CREATE PROCEDURE WWSBEURO.getSkGLE
     (
       in PiSp CHAR ( 1),
       in  PiSkSo char (1),
       in  PiSkArt  char (2),
       in  PiSkKdRl char (7),
       in  PiSkArRl char (8),
       in  PiSkPrLi char (2),
       
        OUT PoSkLgPr DEC (11, 4), 
        OUT PoSkLgR1 DEC (5, 2), 
        OUT PoSkLgR2 DEC (5, 2), 
        out PoSkStPr DEC (11, 4), 
        OUT PoSkStR1 DEC (5, 2), 
        OUT PoSkStR2 DEC (5, 2),
        out PoArtBez char (61),
        out PoVerEh char (2),
       
        OUT PoLog char (100),
        OUT PoError char (1)
    
    
       ) 
    LANGUAGE CL DETERMINISTIC CONTAINS SQL
    CALLED ON NULL INPUT EXTERNAL NAME WWSBEURO.#getSkSp PARAMETER STYLE
    GENERAL
    Extract form Java Program:

    Code:
    con = DriverManager.getConnection(ConnectionString[0],DbUser,UserPassword);			
    				cs = con.prepareCall("CALL WWSBEURO.GETSKGLE('?','?','?','?','?','?', '?','?','?','?','?','?','?','?','?','?' ) " );
    				
    				// define Parameters
    				   // define IN Parameter
    			     cs.setString(1, InSparte);
    			     cs.setString(2, InStandort );
    			     cs.setString(3, InSKart);
    			     cs.setString(4, InKundenRel );
    			     cs.setString(5, InArtikelRel);
    			     cs.setString(6, InPreisliste);
    			      		    			     
    			      // define OUT Parameter
    				  cs.registerOutParameter(7, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(8, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(9, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(10, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(11, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(12, java.sql.Types.DECIMAL);
    				  
    				  cs.registerOutParameter(13, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(14, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(15, java.sql.Types.DECIMAL);
    				  cs.registerOutParameter(16, java.sql.Types.DECIMAL);
    				  
    			    // run SP
    			    cs.executeQuery();
    			    
    			    OutLagerPreis = cs.getBigDecimal(7);
    			    OutLagerRabattProz1 = cs.getBigDecimal(8);	
    			    OutLagerRabattProz2 = cs.getBigDecimal(9);
    			    OutStreckenPreis = cs.getBigDecimal(10);
    			    OutStreckenPreisRabattProz1 = cs.getBigDecimal(11);
    			    OutStreckenPreisRabattProz2 = cs.getBigDecimal(12);
    			    OutArtikelBezeichnung = cs.getString(13);
    			    OutVerEH = cs.getString(14); 
    			    OutLogText = cs.getString(15);
    			    OutError= cs.getString(16);
    				
    			    cs.close();
    The Java compiler complains:
    java.sql.SQLException: [SQL0469] Attribut IN, OUT oder INOUT für Parameter 7 in Prozedur GETSKGLE in WWSBEURO ungültig. Ursache . . . . : Das Attribut IN, INOUT oder OUT, das für Parameter 7 bei der Definition der Prozedur angegeben wurde, ist nicht gültig. Der Parametername ist POSKLGPR. Einer der folgenden Fehler ist aufgetreten: -- Das Attribut ist mit dem Parameter in der Anweisung CALL nicht konsistent. Wurde der Parameter als INOUT oder OUT deklariert, muss der Parameter in der Anweisung CALL als Host-Variable oder globale Variable angegeben werden. -- Das Attribut wurde als INOUT oder OUT angegeben und REXX wurde als Sprache angegeben. Wird REXX angegeben, muss das Attribut IN lauten. Fehlerbeseitigung: Entweder das Attribut für den Parameter in der Anweisung DECLARE PROCEDURE, CREATE PROCEDURE bzw. ALTER PROCEDURE ändern oder den Parameter ändern. Die Anforderung wiederholen.
    at com.ibm.as400.access.JDError.throwSQLException(JDE rror.java:696)
    at com.ibm.as400.access.JDError.throwSQLException(JDE rror.java:662)
    at com.ibm.as400.access.AS400JDBCStatement.commonPrep are(AS400JDBCStatement.java:1763)
    at com.ibm.as400.access.AS400JDBCPreparedStatement.<i nit>(AS400JDBCPreparedStatement.java:354)
    at com.ibm.as400.access.AS400JDBCCallableStatement.<i nit>(AS400JDBCCallableStatement.java:122)
    at com.ibm.as400.access.AS400JDBCConnection.prepareCa ll(AS400JDBCConnection.java:1912)
    at com.ibm.as400.access.AS400JDBCConnection.prepareCa ll(AS400JDBCConnection.java:1813)
    at JDBC_AS400_Example.main(JDBC_AS400_Example.java:84 )

    Can somebody give me a hint to use dec(x,x) as out Parameter?
    Thanks in advance
    Jürgen

  • #2
    Re: Problem with Stored Proc -&gt; Returning DEC (11, 4) Out Parameter to JDBC

    Hi,

    i have found the mistake

    1)
    cs = con.prepareCall ("{call WWSBEURO.chkskgle(?,?,?,?,?,?,?,?,?,? ,?) }");
    --> quotes are not allowed with ?

    2)

    cs.execute();
    --> this is the right method in the interface CallableStatement to execute a stored procedure with out parameters.

    Maybe this will help other developers

    Comment

    Working...
    X