pl/sql:可以在oracle中运行CREATE OR REPLACE PACKAGE BODY HILL.CHAXUN
IS
FUNCTION LIST_PERSON(VAR_ID1 IN PERSON.ID1%TYPE,VAR_ID2 OUT PERSON.ID2%TYPE)
RETURN VARCHAR2 IS
BEGIN
SELECT ID2
INTO VAR_ID2
FROM PERSON
WHERE ID1 = VAR_ID1;
RETURN VAR_ID2;
END;
END;java主要代码: conn = DriverManager.getConnection(url, user, psw);
cstmt = conn.prepareCall("{?=call CHAXUN.LIST_PERSON(?,?)}");
cstmt.setString(1,"1");
cstmt.registerOutParameter(2,Types.VARCHAR);
cstmt.executeQuery();
String num = cstmt.getString(2);
System.out.print(num);
报错:java.sql.SQLException: ORA-01008: not all variables bound请问各位如何修改java的代码,还有就是有没有实例可以让我参考的,我是刚刚学习新手!
IS
FUNCTION LIST_PERSON(VAR_ID1 IN PERSON.ID1%TYPE,VAR_ID2 OUT PERSON.ID2%TYPE)
RETURN VARCHAR2 IS
BEGIN
SELECT ID2
INTO VAR_ID2
FROM PERSON
WHERE ID1 = VAR_ID1;
RETURN VAR_ID2;
END;
END;java主要代码: conn = DriverManager.getConnection(url, user, psw);
cstmt = conn.prepareCall("{?=call CHAXUN.LIST_PERSON(?,?)}");
cstmt.setString(1,"1");
cstmt.registerOutParameter(2,Types.VARCHAR);
cstmt.executeQuery();
String num = cstmt.getString(2);
System.out.print(num);
报错:java.sql.SQLException: ORA-01008: not all variables bound请问各位如何修改java的代码,还有就是有没有实例可以让我参考的,我是刚刚学习新手!
String [][] parameter_in=in_parameter;
int [] parameter_out=out_parameter;
String [] return_process=new String[parameter_out.length];
String call=callstr;
try{
System.out.println(call);
if(conn==null)
conn = connectionMgr.requestcon();
CallableStatement cstmt = conn.prepareCall(call);
for(int i=0;i<parameter_in.length;i++)
for(int j=0;j<parameter_in[i].length;j++){
if(parameter_in[i][0].equals("1"))
cstmt.setString(1,parameter_in[i][1]);
else
cstmt.setInt(1 ,Integer.parseInt(parameter_in[i][1]));
}
for(int i=0;i<parameter_out.length;i++){
cstmt.registerOutParameter(parameter_in.length+i+1,parameter_out[i]);
}
cstmt.execute();
for(int i=0;i<return_process.length;i++)
return_process[i]=cstmt.getString(parameter_in.length+i+1);
}
catch(SQLException e)
{System.err.println("opendb.call_process():" + e.getMessage());}
finally{closedb();}
System.out.println(call);
return return_process;
}
函数说明:
public String[] call_process(String callstr,String [][] in_parameter,int[] out_parameter) throws RemoteException{}
“String callstr”此参数是访问Oracle过程命令字串;
“String [][] in_parameter,int[] out_parameter”是Oracle过程的参数,以为本例子一次需要执行多次过程所以这里是数组;返回的是一个一维数组。以下是使用这个方法的例子:
//调用存储过程返回用户订阅得信息
String sqlstr = "{call SHOW_USERORDER(?,?)}";
String[][] c_in_para = new String[1][2];
String[] c_info;
int[] c_out_para = new int[1];
c_in_para[0][0] = "1"; //1是字符串类型,其他是整型
c_in_para[0][1] = P_Mobilephone_No;
c_out_para[0] = Types.VARCHAR; //
c_info = intfc.call_process(sqlstr, c_in_para, c_out_para); //返回给用户的数据