2014-01-16 28 views
1

當執行對我的SQL函數的調用時出現此問題。錯誤:ORA-01008:並非所有變量綁定調用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

你有8個placeholers在你的功能。

{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); 
+0

對不起是複製錯誤。 第8個參數是響應。 cst.execute(); String responsecst.getString(8); System.out.println(RES.INTERACCION:response); 而objSite不爲空,因爲現在這個參數是手動的,現在是1234 謝謝 – user3202294

+0

@ user3202294請參閱update1 – Bhushan

+0

非常感謝,現在工作正確。 – user3202294

相關問題