加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle在out参数中访问光标

发布时间:2020-12-12 14:34:40 所属栏目:百科 来源:网络整理
导读:一 概念 申明包结构 包头:负责申明 包体:负责实现 二 需求 查询某个部门中所有员工的所有信息 三 包头 CREATE OR REPLACE PACKAGE MYPACKAGE AS type empcursor is ref cursor ; procedure queryEmplist ( dno in number , emplist out empcursor ); END M

一 概念

申明包结构 包头:负责申明 包体:负责实现 二 需求 查询某个部门中所有员工的所有信息 三 包头
  1. CREATE OR REPLACE
  2. PACKAGE MYPACKAGE AS
  3. type empcursor isref cursor;
  4. procedure queryEmplist(dno in number,emplist out empcursor);
  5. END MYPACKAGE;
四 包体 包体需要实现包头中声明的所有方法 CREATE OR REPLACE
  • PACKAGE BODY MYPACKAGE AS
  • emplist out empcursor) AS
  • BEGIN
  • --打开光标
  • open emplist forselect*from emp where deptno = dno;
  • END queryEmplist;
  • END MYPACKAGE;
  • 五 在应用程序中访问包中的存储过程 1、代码 package demo.oracle;
  • import java.sql.CallableStatement;
  • import java.sql.Connection;
  • import java.sql.ResultSet;
  • import oracle.jdbc.OracleCallableStatement;
  • import oracle.jdbc.OracleTypes;
  • import org.junit.Test;
  • import demo.utils.JDBCUtils;
  • publicclassTestCursor{
  • /*
  • CREATE OR REPLACE PACKAGE MYPACKAGE AS
  • type empcursor is ref cursor;
  • procedure queryEmplist(dno in number,emplist out empcursor);
  • END MYPACKAGE;
  • * */
  • @Test
  • publicvoid testCursor(){
  • String sql="{call MYPACKAGE.queryEmplist(?,?)}";
  • Connection conn =null;
  • CallableStatement call =null;
  • ResultSet rs =null;
  • try{
  • //获取数据库的连接
  • conn =JDBCUtils.getConnection();
  • //创建statement
  • call = conn.prepareCall(sql);
  • //对于in参数,赋值
  • call.setInt(1,10);
  • //对于out参数,申明
  • call.registerOutParameter(2,OracleTypes.CURSOR);
  • //执行调用
  • call.execute();
  • //取出该部门中所有员工的信息
  • rs =((OracleCallableStatement)call).getCursor(2);
  • while(rs.next()){
  • //取出该员工的员工号,姓名,薪水和职位
  • int empno = rs.getInt("empno");
  • String name =rs.getString("ename");
  • double salay = rs.getDouble("sal");
  • String job = rs.getString("empjob");
  • System.out.println(empno+"t"+name+"t"+salay+"t"+job);
  • }
  • }catch(Exception e){
  • e.printStackTrace();
  • }finally{
  • JDBCUtils.release(conn, call, rs);
  • }
  • }
  • }
  • 2、运行结果 7782CLARK6450.0MANAGER 7839KING10100.0PRESIDENT 7934MILLER3300.0CLERK

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读