存储过程的输出参数为游标,PL/SQL中如何调用 Java代码如何调用
存储过程的输出参数为游标,PL/SQL中如何调用 Java代码如何调用
码农_皇甫 发表于1年前
存储过程的输出参数为游标,PL/SQL中如何调用 Java代码如何调用
  • 发表于 1年前
  • 阅读 19
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云 学生专属云服务套餐 10元起购>>>   


--查询某个部门中所有员工的所有信息

--包头
CREATE OR REPLACE PACKAGE MYPACKAGE AS
       type empcursor is ref cursor;
       PROCEDURE queryEmpList(dno IN NUMBER ,empList OUT empcursor);
END MYPACKAGE;
--包体
CREATE OR REPLACE PACKAGE BODY MYPACKAGE AS
       PROCEDURE queryEmpList(dno IN NUMBER , empList OUT empcursor) AS
       BEGIN
           OPEN empList FOR SELECT * FROM emp WHERE deptno=dno;
       END queryEmpList;
END MYPACKAGE;  

--PL/SQL调用

declare
  type type_cur_data is ref cursor return emp%rowtype;
  v_cur_data type_cur_data;
  v_tab_data emp%rowtype;
begin
  MYPACKAGE.queryEmpList(10, v_cur_data);
  while (1=1) loop
    fetch v_cur_data into v_tab_data;
    exit when v_cur_data%notfound;
    dbms_output.put_line(v_tab_data.deptno || v_tab_data.ename);
  end loop;
end;
/*
    CREATE OR REPLACE PACKAGE MYPACKAGE AS
        type empcursor is ref cursor;
        procedure queryEmpList(dno in number,empList out empcursor);
    END MYPACKAGE;
*/

--java调用

@Test
public void testCursor(){
    String sql = "{call MYPACKAGE.queryEmpList(?,?)}";
    Connection conn = null;
    CallableStatement call = null;
    ResultSet rs = null;
    try {
        conn = JDBCUtils.getConnection();
        call = conn.prepareCall(sql);
        // 对于 in  参数,赋值
        call.setInt(1, 20);
        // 对于 out  参数,申明
        call.registerOutParameter(2, OracleTypes.CURSOR);
        // 执行
        call.execute();
        // 取出结果
        rs = ((OracleCallableStatement)call).getCursor(2);
        while(rs.next()){
        String name = rs.getString("ename");
        double sal = rs.getDouble("sal");
        String job = rs.getString("empjob");
        System.out.println(name+"\t"+sal+"\t"+job);
    }
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
}

 

共有 人打赏支持
粉丝 0
博文 12
码字总数 5211
×
码农_皇甫
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: