java - 错误:ORA 01008: 不是所有的变量都调用SQL函数

  显示原文与译文双语对照的内容

执行对 SQL funcion的调用时遇到这里问题。

这是调用函数的代码


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)

你能帮我谢谢?

时间: 作者:

你的函数中有 8个 placeholers 。


{call OMV_CREAR_INTERACCION(?,?,?,?,?,?,?,?)}

你只能通过 setXXX() 提供 7个参数。

因此,你必须将 8th 个参数传递给 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);

作者:
...