执行调用我的SQL函数时,你有这个问题。
这是调用函数的代码
CallableStatement cst = conn.prepareCall("{call OMV_CREAR_INTERACCION(?,?,?,?,?,?,?,?)}");
// Parametros del procedimiento almacenado
cst.setInt(1, Integer.parseInt(objSite));
cst.setString(2, titulo);
cst.setString(3, "CRM");
cst.setString(4, "");
cst.setString(5, razon1);
cst.setString(6, razon2);
cst.setString(7, razon3);
// Ejecuta el procedimiento almacenado
cst.execute();
但是当执行时,在控制台中显示:
Error: ORA-01008: not all variables bound
Exception in thread "RsSp" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at enviaSmsPortDonante.EnviaSMSPortDonante.interaccion(EnviaSMSPortDonante.java:327)
at enviaSmsPortDonante.EnviaSMSPortDonante.run(EnviaSMSPortDonante.java:124)
at java.lang.Thread.run(Unknown Source)
这是SQL函数:
CREATE OR REPLACE PROCEDURE OMV_CREAR_INTERACCION(p_site_objid IN NUMBER,
p_titulo IN VARCHAR2,
p_origen IN VARCHAR2,
p_notas IN VARCHAR2,
p_reason_1 IN VARCHAR2,
p_reason_2 IN VARCHAR2,
p_reason_3 IN VARCHAR2,
p_resultado OUT VARCHAR2)
你能帮我吗?
感谢
答案 0 :(得分:1)
你的职能中有8个安置者。
{call OMV_CREAR_INTERACCION(?,?,?,?,?,?,?,?)}
并且您只通过setXXX()
提供了7个参数。
所以你必须将第8个参数传递给cst
。
你也得到java.lang.NumberFormatException
。因此,您必须检查objSite
是否为空并且在以下语句中具有值。
cst.setInt(1, Integer.parseInt(objSite));
<强> UPDATE1 强>
CallableStatement cst = conn.prepareCall("{call OMV_CREAR_INTERACCION(?,?,?,?,?,?,?,?)}");
cst.setInt(1, Integer.parseInt(objSite));
cst.setString(2, titulo);
cst.setString(3, "CRM");
cst.setString(4, "");
cst.setString(5, razon1);
cst.setString(6, razon2);
cst.setString(7, razon3);
cst.registerOutParameter(8, Types.VARCHAR);//out parameter for p_resultado
cst.execute();
//to get out parameter
String str = cst.getString(8);