boonkelz
08-05-08, 07:50
Hallo zusammen !
Ich beschäftige mich schon seit einiger Zeit mit Stored Procedure Aufrufen von Java nach RPG Service Programmmen. Leider kommt beim Java Debug immer der Fehler, dass er mein Externes Programm S_TESTDP nicht gefunden hat.
Hintergrund: Ich versuche anhand von 4 numerischen Werten einen Text zurückzubekommen:
Procedure;
getObjektBez B Export
getObjektBez PI
p#firma 2 0
p#obj 7 0
p#objA 1 0
p#objG 1 0
p#obbzg 28
Local fields
Eval k#firma = p#firma
Eval k#obj = p#obj
Eval k#objA = p#objA
Eval k#objG = p#objG
ListObstdp Chain(N) OBSTDP
If not %found(Obstdp)
eval p#obbzg = *blanks
Else
eval p#obbzg = %trim(Obbzg)
Endif
getObjektBez E
Hier die Stored Procedure , die ich erstellt habe:
CREATE PROCEDURE STAMOBJ.SP_GETOBJ (
IN FIRMA DECIMAL(2, 0) ,
IN OBJEKT DECIMAL(7, 0) ,
IN OBJEKTART DECIMAL(1, 0) ,
IN OBJEKTGESHH DECIMAL(1, 0) ,
OUT OBJEKTBEZ CHAR(28) )
LANGUAGE RPGLE
SPECIFIC STAMOBJ.SP_GETOBJ
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'STAMOBJ/S_TESTDP(getobjektbez)'
PARAMETER STYLE GENERAL ;
COMMENT ON SPECIFIC PROCEDURE STAMOBJ.SP_GETOBJ
IS 'Objektbezeichnung aus OBSTDP' ;
Java PGM Aufruf
public void sucheObjektAdresse4() throws ClassNotFoundException, SQLException {
// Connection Variables
String AS400_ADDRESS = "xxx";
String AS400_USERNAME = "xxx";
String AS400_PASSWORD = "xxx";
String AS400_LIBRARY = "STAMOBJ";
START: Connection Block
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
try {
the400 = DriverManager.getConnection("jdbc:as400://" + AS400_ADDRESS + "/" + AS400_LIBRARY, AS400_USERNAME, AS400_PASSWORD);
System.out.println("Connection successful!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// END: Connection Block
try{
// START: Call the Stored Procedure
CallableStatement cstmt = the400.prepareCall("{CALL " + AS400_LIBRARY + ".SP_GETOBJ(?, ?, ?, ?, ?)}",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
System.out.println(cstmt.toString());
*** Hier steht dann STMT0001, statt der Aufruf ***
// set inputs
cstmt.setDouble(1, 01); // firma
cstmt.setDouble(2, 2215); // objekt
cstmt.setDouble(3, 1); // objektArt
cstmt.setDouble(4, 1); // objektGeshh
// set outputs
cstmt.registerOutParameter(5, java.sql.Types.CHAR); // objektbezeichnung
// execute
ResultSet rs = cstmt.executeQuery();
System.out.println(rs.toString());
*** das executeQuery geht nicht auf ***
// display returned values
System.out.println("\nreturned parameters...");
System.out.println("Objektbezeichnung: " + cstmt.getString(5));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Es kommt folgende Fehlermeldung:
[SQL0444] Externes Programm S_TESTDP in STAMOBJ nicht gefunden.
Bitte um Eure Hilfe ! :confused::confused::confused::confused::confused: :confused:
Vielen Dank
Ich beschäftige mich schon seit einiger Zeit mit Stored Procedure Aufrufen von Java nach RPG Service Programmmen. Leider kommt beim Java Debug immer der Fehler, dass er mein Externes Programm S_TESTDP nicht gefunden hat.
Hintergrund: Ich versuche anhand von 4 numerischen Werten einen Text zurückzubekommen:
Procedure;
getObjektBez B Export
getObjektBez PI
p#firma 2 0
p#obj 7 0
p#objA 1 0
p#objG 1 0
p#obbzg 28
Local fields
Eval k#firma = p#firma
Eval k#obj = p#obj
Eval k#objA = p#objA
Eval k#objG = p#objG
ListObstdp Chain(N) OBSTDP
If not %found(Obstdp)
eval p#obbzg = *blanks
Else
eval p#obbzg = %trim(Obbzg)
Endif
getObjektBez E
Hier die Stored Procedure , die ich erstellt habe:
CREATE PROCEDURE STAMOBJ.SP_GETOBJ (
IN FIRMA DECIMAL(2, 0) ,
IN OBJEKT DECIMAL(7, 0) ,
IN OBJEKTART DECIMAL(1, 0) ,
IN OBJEKTGESHH DECIMAL(1, 0) ,
OUT OBJEKTBEZ CHAR(28) )
LANGUAGE RPGLE
SPECIFIC STAMOBJ.SP_GETOBJ
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'STAMOBJ/S_TESTDP(getobjektbez)'
PARAMETER STYLE GENERAL ;
COMMENT ON SPECIFIC PROCEDURE STAMOBJ.SP_GETOBJ
IS 'Objektbezeichnung aus OBSTDP' ;
Java PGM Aufruf
public void sucheObjektAdresse4() throws ClassNotFoundException, SQLException {
// Connection Variables
String AS400_ADDRESS = "xxx";
String AS400_USERNAME = "xxx";
String AS400_PASSWORD = "xxx";
String AS400_LIBRARY = "STAMOBJ";
START: Connection Block
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
try {
the400 = DriverManager.getConnection("jdbc:as400://" + AS400_ADDRESS + "/" + AS400_LIBRARY, AS400_USERNAME, AS400_PASSWORD);
System.out.println("Connection successful!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// END: Connection Block
try{
// START: Call the Stored Procedure
CallableStatement cstmt = the400.prepareCall("{CALL " + AS400_LIBRARY + ".SP_GETOBJ(?, ?, ?, ?, ?)}",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
System.out.println(cstmt.toString());
*** Hier steht dann STMT0001, statt der Aufruf ***
// set inputs
cstmt.setDouble(1, 01); // firma
cstmt.setDouble(2, 2215); // objekt
cstmt.setDouble(3, 1); // objektArt
cstmt.setDouble(4, 1); // objektGeshh
// set outputs
cstmt.registerOutParameter(5, java.sql.Types.CHAR); // objektbezeichnung
// execute
ResultSet rs = cstmt.executeQuery();
System.out.println(rs.toString());
*** das executeQuery geht nicht auf ***
// display returned values
System.out.println("\nreturned parameters...");
System.out.println("Objektbezeichnung: " + cstmt.getString(5));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Es kommt folgende Fehlermeldung:
[SQL0444] Externes Programm S_TESTDP in STAMOBJ nicht gefunden.
Bitte um Eure Hilfe ! :confused::confused::confused::confused::confused: :confused:
Vielen Dank