Oracle存储过程的调用 |
发布时间: 2012/8/15 17:16:21 |
Oracle 表的语句 create table student(sid int,sname varchar(20),sno int) 一:无返回值的存储过程 create or replace procedure proc_student(para1 Integer, para2 varchar2, para3 Integer) is BEGIN public class TestProcedureOne {
public static void main(String[] args) { ResultSet rs = null; proc = conn.prepareCall("{call system.testc(?,?,?)}");//这里不是PreparedStatement接口,而是调用存储过程的接口 proc.setInt(1, 1); } catch (SQLException ex2) { } catch (Exception ex2) { 二:有返回值的存储过程(非列表) create or replace procedure proc_student2(para_1 Integer,para_2 out varchar2, para_3 out Integer) java的主要代码如下 proc = conn.prepareCall("{call system.proc_student2(?,?,?)}"); proc.setInt(1, 1); 三:返回列表 由于Oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分, 1, 建一个程序包。如下: create or replace package package_1 as type test_cursor is ref cursor; end package_1; 2,建立存储过程,存储过程为: create or replace prcedure proc_student3(stu_cursor out package_1.test_cursor) is begin open stu_cursor for select * from system.student end 可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。 java的主要代码如下 proc = conn.prepareCall("{call system.proc_student3(?)}"); 本文出自:亿恩科技【www.enkj.com】 |