弄了半天,网上找了很久,都自己总结的。这里的表用 scott 用户登录 里面都有。给像我这样正在摸索的新手们:
实例 1 :无返回结果,无须传入参数的
第一步:创建存储过程
create or replace procedure p_002 is
begin
dbms_output.put_line( ' 开始 ' );
update emp e set sal= 810 where e.empno = 7369 ;
dbms_output.put_line( ' 结束 ' );
end p_002;
第二步: Java 代码
@Test
public void testP_002() throws SQLException {
CallableStatement proc = null ;
proc = ConnUtil.getConnection ().prepareCall( "{ call p_002}" );
proc.execute();
}
实例 2 :需要传入参数,无返回结果:(可跳过,直接看实例 3 )
实例 3 :需要传入参数,返回单个结果
第一步:创建存储过程:
create or replace procedure p_001(
pram in number ,-- 输入的员工 ID
out1 out varchar2 ,-- 输出的姓名
out2 out varchar2 – 输出的薪水
) is
r emp % rowtype ; -- 得到某列
BEGIN
dbms_output.put_line( ' 编号 姓名 薪水 ' );
select * into r from emp where empno = pram;
dbms_output.put_line(r.ename || ' ' || r.sal); -- 输出结果 , 需要 set serverout on 才能显示 .
out1 := r.ename; -- 赋值
out2 := r.sal; -- 赋值
END ;
第二步: Java 代码:
@Test
public void testProcedure() throws Exception {
CallableStatement proc = null ;
proc = ConnUtil.getConnection ().prepareCall( "{ call p_001(?,?,?) }" );
proc.setInt(1, 7499);
proc.registerOutParameter(2, java.sql.Types. CHAR );
proc.registerOutParameter(3, java.sql.Types. CHAR );
proc.execute();
System. out .println(proc.getString(2) + " " + proc.getString(3));
}
实例 4: 输入一个参数,得到多个结果集:
第一步:定义一个游标:(这里一定要有包名)
create or replace package out_param is
type out_cur is ref cursor ;
end out_param;
第二步:定义存储过程:
create or replace procedure p_003(i_job in varchar2 ,
p_rc out PKG_TEST.myrctype) as
BEGIN
OPEN p_rc FOR
select * from emp where job = i_job;
END ;
第三步: Java 代码:
@Test
public void testP_003() {
try {
Connection conn = ConnUtil.getConnection ();
CallableStatement stmt = conn.prepareCall( "{ call P_003(?, ?) }" );
stmt.setString(1, "SALESMAN" );
stmt.registerOutParameter(2, -10 /* OracleTypes.CURSOR = -10 */ ); // REF
// CURSOR(OracleTypes.CURSOR==-10)
stmt.execute();
ResultSet rs = (ResultSet) stmt.getObject(2);
System. out .println( "----" + rs.toString() + "----" );
while (rs.next()) {
System. out .println(rs.getString( "ename" )+ rs.getString( "job" ));
}
rs.close();
rs = null ;
stmt.close();
stmt = null ;
conn.close();
conn = null ;
} catch (SQLException e) {
System. out .println(e.getLocalizedMessage());
}
}