错误:ORA-01008:并非所有变量绑定都调用SQL函数

时间:2014-01-16 11:41:04

标签: java sql oracle

执行调用我的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)
你能帮我吗? 感谢

1 个答案:

答案 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);