--数据库中存储过程的调用
create a test window
declare
 --字段的声明
 cid varchar2(20) := 'A1',
 cname varchar2(50) :='ck',
 csex student.sex :='男'
begin
 --执行存储过程
 --存储过程名
 名字(cid,cname,csex);
end;

如果存储过程需要输出内容,那么在Test window中是无法执行的,必须转到command window
并开启输出功能
set serveroutput on
然后再执行存储过程


--java调用存储过程

无返回 

//test1为存储过程名
 Connection conn =  DBHelper.getConnection();
 //获得调用存储过程的预处理对象
 CallableStatement cs = conn.prepareCall("{call test1(?,?,?,?)}");
 conn.setAutoCommit(false); //设置为手动提交
 cs.setInt(1,4);//给?处添加参数,?从1开始记起
 cs.setString(2, "lck");
 cs.setInt(3, 23);
 cs.setString(4, "男");
 cs.execute(); //执行存储过程
 conn.commit();

有返回[单值]
//test1为存储过程名
 Connection conn =  DBHelper.getConnection();
 //获得调用存储过程的预处理对象
 CallableStatement cs = conn.prepareCall("{call test1(?)}");
 //注册输出参数,给定参数的类型为游标,游标指向了一个结果集合
 cs.registerOutParameter(1,oracle.jdbc.OracleTypes.VARCHAR);//不同的jdbc版本路径不同
 cs.execute(); //执行存储过程
 //获得返回值,下表out参数的为止,从1开始
 System.out.println(cs.getString(1));
 
 有返回[列表]
//test1为存储过程名
 Connection conn =  DBHelper.getConnection();
 //获得调用存储过程的预处理对象
 CallableStatement cs = conn.prepareCall("{call test1(?)}");
 //注册输出参数,给定参数的类型为游标,游标指向了一个结果集合
 cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);//不同的jdbc版本路径不同
 cs.execute(); //执行存储过程
 //获得列表结果集合
 ResultSet rs = cs.getResultSet();
 //遍历结果集合
 while(rs.next){//如果集合存在下一行数据
  System.out.println(rs.getString(1));
 }