【发布时间】:2014-10-24 18:40:58
【问题描述】:
我试图从我的 java 代码中调用一个存储过程,但我得到了一个 sql 异常。 这是我的代码 sn-p
CallableStatement cstmt = conn.prepareCall("{call stroredprocname(?,?,?)}");
cstmt.setString(1, filePattern);
cstmt.setString(2, fromDate);
cstmt.setString(3, toDate);
ResultSet resultSet = cstmt.executeQuery();
这是我得到的错误代码:
com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -440, SQLSTATE: 42884, SQLERRMC: stroredprocname;PROCEDURE
at com.ibm.db2.jcc.c.tf.e(tf.java:1680)
at com.ibm.db2.jcc.c.tf.a(tf.java:1239)
at com.ibm.db2.jcc.b.jb.h(jb.java:139)
at com.ibm.db2.jcc.b.jb.d(jb.java:71)
at com.ibm.db2.jcc.b.w.d(w.java:54)
at com.ibm.db2.jcc.b.cc.i(cc.java:208)
at com.ibm.db2.jcc.c.tf.o(tf.java:1236)
at com.ibm.db2.jcc.c.uf.ib(uf.java:1831)
at com.ibm.db2.jcc.c.uf.d(uf.java:2296)
at com.ibm.db2.jcc.c.vf.Z(vf.java:159)
at com.ibm.db2.jcc.c.vf.execute(vf.java:142)
at MyClass(MyClass.java:102)
有人能帮帮我吗!提前致谢!
【问题讨论】:
-
您是否在 db 本身中测试(编译)了您的 pl/sql?
-
上面的错误意味着它找不到存储过程。如果它编译正确,那么我相信你必须提供模式名称和过程名称,例如:调用 schemaname.stroredprocname(?,?,? )
-
是的,我在数据库中编译了这个。我也尝试给出模式名称,它现在给了我这样的错误 com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -313, SQLSTATE: 07001, SQLERRMC: null at com.ibm.db2 .jcc.c.tf.d(tf.java:1396) 在 com.ibm.db2.jcc.b.jb.l(jb.java:367) 在 com.ibm.db2.jcc.b.jb.e (jb.java:92) 在 com.ibm.db2.jcc.b.w.e(w.java:72) 在 com.ibm.db2.jcc.b.cc.h(cc.java:203) 在 com.ibm。 db2.jcc.c.tf.q(tf.java:1363) 在 com.ibm.db2.jcc.c.uf.d(uf.java:2388) 在 com.ibm.db2.jcc.c.vf。 X(vf.java:188) at com.ibm.db2.jcc.c.vf.executeQuery(vf.java:171)
-
很好,请在调用 store proc 时找到架构名称并添加到代码中,正如我在回答中提到的那样。它会像魅力一样工作。
-
您的查询是什么样的?你能检查一下参数吗?参数最有可能不匹配?