oracle中的包

1.包:

  包是过程、函数、变量、常量、类型和游标等PL/SQL程序设计元素的组合。包的组成部分:包(包头)和包的实现(包体)。

2.注意的几点:

(1)先定义包,再实现包。

(2)包体中的函数名、过程名和包头中的函数名、过程名相同。

(3)包中没有begin。

(4)在包体中进行声明时不用declare。

(5)在包体中实现函数和过程时不要create orreplace。

(6)包头与包体分离。

3.一个实例

(1)定义包
  create package pack1 is
    procedure pro1(in_empno in emp.empno%type);
    function fun1(in_empno in emp.empno%type) return number;
  end;

(2)定义包体

  create package body pack1 is
    p_comm number(7,2);

    --实现存储过程
    procedure pro1(in_empno in emp.empno%type) is
      v_ename emp.ename%type;
      v_sal emp.sal%type;
    begin
      select ename,sal into v_ename,v_sal from emp where empno = in_empno;
      dbms_output.put_line('员工号为:'||in_empno||'员工姓名为'||v_ename||'员工薪水为'||v_sal);
    end;
    --实现存储函数
    function fun1(in_empno emp.empno%type)
    return number is
      v_comm emp.comm%type;
    begin
      select nvl(comm,0) into v_comm from emp where empno = in_empno;
      return v_comm;
    end;
  end;

(3)调用包中的函数和过程

  begin
    pack1.pro1(7499);
    dbms_output.put_line('员工号是7499的员工奖金为'||pack1.fun1(7499));
  end;

4.java中调用包的一个实例

(1)定义包

  create package pack2 is
    type cur_emp is ref cursor;
    procedure pro_1(in_deptno in emp.deptno%type,out_cur_emp out cur_emp);
  end;

(2)定义包体

  create package body pack2 is
    procedure pro_1(in_deptno in emp.deptno%type,out_cur_emp out cur_emp) is
    begin
      open out_cur_emp for select *from emp where deptno = in_deptno;
    end;
  end;

(3)java中调用包

  String sql = "{call pack2.pro_1(?,?)}";
  cs = ct.prepareCall(sql);
  cs.setInt(1, 10);
  cs.registerOutParameter(2, OracleTypes.CURSOR);
  cs.execute();
  rs = ((OracleCallableStatement) cs).getCursor(2);
  if(rs!=null){
    while(rs.next()){
    System.out.println("员工号是"+rs.getString(1)+"名字是"+rs.getString(2)+"薪水是"+rs.getString(6));
    }
  }

posted on 2017-08-03 17:23  Luthien_rong  阅读(184)  评论(0编辑  收藏  举报

导航