import java.sql.*;publicclassOracleProcedure{publicstaticvoidmain(String[] args)throws Exception {
Class.forName("oracle.jdbc.OracleDriver");//加载驱动
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","oracle");//建立连接/* 1.调用不带参数的存储过程
CREATE OR REPLACE procedure add_dept is
begin
insert into dept values(50,'aaa','bbb');
commit;
end;
*/
String sql ="call add_dept()";
CallableStatement cst = con.prepareCall(sql);
cst.execute();/* 2.调用带参数的存储过程
CREATE OR REPLACE procedure find_dept (
dno number,
dname out varchar2,
loc out varchar2
) is
begin
select dname,loc into dname,loc from dept where deptno = dno;
end;
*/
sql ="call find_dept(?,?,?)";// 第一个为输入参数,后两个为输出参数
cst = con.prepareCall(sql);
cst.setInt(1,50);
cst.registerOutParameter(2, Types.VARCHAR);// 设置输出参数及类型
cst.registerOutParameter(3, Types.VARCHAR);
cst.execute();
System.out.println(cst.getString(2)+"\t"+ cst.getString(3));/* 3.调用带既是输入又是输出参数的存储过程
CREATE OR REPLACE procedure cal (
m in out number,
n in out number
) is
a number;
b number;
begin
a:=m+n;
b:=m-n;
m:=a;
n:=b;
end;
*/
sql ="call cal(?,?)";
cst = con.prepareCall(sql);
cst.setInt(1,58);
cst.setInt(2,16);// 设置参数
cst.registerOutParameter(1, Types.INTEGER);
cst.registerOutParameter(2, oracle.jdbc.oracore.OracleType.STYLE_INT);
cst.execute();
System.out.println(cst.getInt(1)+"\t"+ cst.getInt(2));
cst.close();
con.close();}}