有多个返回值的存储过程-非列表形式

案例扩张:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资和岗位。


plsql代码
--有输入和输出的存储过程(返回多个值)
create or replace procedure sun_pro12
(sunNo in number,sunName out varchar2,sunSal out number,sunJob out varchar) is
begin
  select ename,sal,job into sunName,sunSal,sunJob from kkkk where empno=sunNo;
  end;
 
java代码
public class Test1 {
        public static void main(String[] args) {
            Connection ct = null;
            CallableStatement cs = null;
            try {
                //1.加载驱动
                Class.forName("oracle.jdbc.driver.OracleDriver");
                ct = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
               
                //2.创建CallableStatement,专门用来调用存储过程
               
                //看看如何调用有返回值的过程
                //创建CallableStatement
                cs = ct.prepareCall("{call sun_pro12(?,?,?,?)}");
               
                //给第一个?赋值
                cs.setInt(1, 7788);
               
                //给第二个?赋值
                cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
                //oracle.jdbc.OracleTypes选定的类型取决于第二个问号是什么类型的
                cs.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER);
                cs.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);
               
                //执行
                cs.execute();
               
                //取出返回值,要注意?的位置
                String name = cs.getString(2);
                double sal = cs.getDouble(3);
                String job = cs.getString(4);
               
                System.out.println("7788的名字:"+name+'\t'+"工资:"+sal+'\t'+"职位:"+job);
               
            } catch (Exception e) {
                e.printStackTrace();
            }
            finally{
                //关闭各个打开的资源
                try {
                    cs.close();
                    ct.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
}

猜你喜欢

转载自1124117571.iteye.com/blog/2287862