表结构:
SQL> desc emp;
名称 是否为空? 类型
---------------------------------------------------------------------------------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
创建存储过程(有返回值):
SQL> create or replace procedure pro_printEname(v_in_empno in number,v_out_ename out varchar2)
2 as
3 begin
4 select ename into v_out_ename from emp where empno=v_in_empno;
5 end pro_printEname;
6 /
过程已创建。
java调用存储过程:
import java.sql.*;
public class printEname {
public static void main(String[] args) {
Connection conn=null;
CallableStatement cstmt=null;
try{
//注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//获取连接
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORA","scott","tiger");
//调用存储过程
cstmt=conn.prepareCall("{call pro_printEname(?,?)}");
//对?赋值
cstmt.setInt(1, 7369);
cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
//执行
cstmt.execute();
//获取结果
String name=cstmt.getString(2);
System.out.println(name);
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
cstmt.close();
conn.close();
}
catch(Exception e1){
e1.printStackTrace();
}
}
}
}
PS.
欢迎关注行者摩罗微信公众号(xingzhemoluo),共同交流编程经验,扫描下方二维码即可;