第三十九讲
在java中调用无返回值的过程
CallableStatment cs=null;
String sql="{call scott.mypackage.pro2(?,?)}";
cs.execute();
b.在java中调用有返回值的过程
b.1非列表的(就是只有一条结果,非结果集)
如:输入一个雇员编号,输出一个雇员姓名
因为有返回值,故要区分in,out即告诉oracle,这个变量是输出的。
create procedure proTest(v_in_empno in number,v_out_ename out varchar2)
is
begin
select ename into v_out_ename from emp where empno=v_in_empno;
end;
--也不必写输出
写法二:is换成as
在java中调用此过程,并接受用户的返回。
Connection ct=null;
CallaleStatement cs=null;
ResultSet rs=null;
//1.加载驱动
//2.得到连接
//3.创建CallableStatemnet
//4.执行
cs=ct.prepareCall("{call proTest(?,?)}");
cs.setString(1,"7839");--会自动转换字符到数值
cs.registerOutParameter(2,oracle.jdbc.oracleTypes.VARCHAR);--无varchar2
cs.execute();
//5.取结果
String ename=cs.getString(2);//cs提供了很多方法,2表示第二个问号
System.out.println("用户名子是:"+ename);
总结:
对于过程的输入值,使用setXXX,对于过程输出值,使用registerOutParameter,?号顺序要对应,同时还要考虑类型。
取出过程返回值的方法是CallableStatement提供的getXXX(输出参数的位置)