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:
Extract form Java Program:
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
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
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();
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
Comment