【发布时间】:2021-01-30 19:50:11
【问题描述】:
我一直在尝试将 DB2 存储过程中的 java jar 文件作为外部 jar 调用。 下面是我的外部jar文件代码。
package connection;
public class Connect {
static Connection con = null;
static Statement stmt = null;
public static void main(String[] args) throws SQLException {
javastp("v1");
}
public static void javastp( String name) throws SQLException{
try {
con = DriverManager.getConnection( "jdbc:default:connection" );
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO SCHEMA_NAME.TEST(NAME, FLAG) VALUES ('"+name+"',true) ");
}catch (Exception e) {
// ...
}finally {
//Close open resources
if (stmt != null) stmt.close();
if (con != null) con.close();
}
}
}
我在 db2 服务器中使用以下命令安装它
db2 call sqlj.install_jar('file:E:/jarpath../jarname.jar','jarname',0);
下面是 DB2 外部 jar 的存储过程。
CREATE OR REPLACE PROCEDURE SCHEMA_NAME.PROC6()
LANGUAGE java
PARAMETER STYLE java
FENCED
EXTERNAL NAME 'jarname:connection.Connect.main'
存储过程执行成功,没有错误。
但是当我尝试使用下面调用存储过程时,
CALL SCHEMA_NAME.PROC6()
我收到以下错误
SQL Error [38503]: A stored procedure process has been terminated abnormally. Routine name: "SCHEMA_NAME.PROC6". Specific name: "SQL201016144125554".. SQLCODE=-1131, SQLSTATE=38503, DRIVER=4.8.86
当直接在命令提示符下执行 java jar 并且记录被插入到表中时,java jar 工作正常,但我似乎无法弄清楚为什么当我尝试以这种方式调用它时外部存储过程给我错误。
有人能帮帮我吗,因为我卡在这个问题上很久了,我没有 DB2 的背景。
db2level 命令给出以下输出:
DB21085I This instance or install (instance name, where applicable: "DB2")
uses "64" bits and DB2 code release "SQL10058" with level identifier
"0609010E".
Informational tokens are "DB2 v10.5.800.381", "s160901", "IP24000", and Fix
Pack "8".
Product is installed at "C:\PROGRA~1\IBM\SQLLIB" with DB2 Copy Name "DB2COPY1".
Linux Suse db2 版本 11.1.2
数据库服务器 = DB2/LINUXX8664 11.1.2
日志如下:
2020-10-20-09.24.56.746633+330 I4952989679E1230 LEVEL: Error
PID : 31693 TID : 140179352315648 PROC : db2sysc 0
INSTANCE: NODE : 000 DB :
APPHDL : APPID:
AUTHID : HOSTNAME:
EDUID : 2768 EDUNAME: db2agent () 0
FUNCTION: DB2 UDB, routine_infrastructure, sqlerWaitForFencedInvocation, probe:12115
MESSAGE : ZRC=0xFFFFFB38=-1224
SQL1224N The database manager is not able to accept new requests,
has terminated all requests in progress, or has terminated the
specified request because of an error or a forced interrupt.
【问题讨论】:
-
问题不清楚。您是否试图让 Java 存储过程调用另一个外部 Java 过程(即嵌套)?您的问题没有显示此代码。
-
SQLCODE -1131 的错误消息显示“存储过程进程已异常终止。”检查诊断日志中的后台错误。
-
@mao 我正在尝试通过 db2 外部存储过程(上面写的存储过程)调用一个 java jar(我上面写的 java 代码)。我没有嵌套任何东西。很抱歉,但英语不是我的第一语言,所以我希望我上面写的内容有意义。
标签: java db2 db2-luw java-stored-procedures