Oracle学习笔记二十五:包的定义与调用

一、包的作用

• Oracle中包的概念与Java中包的概念非常类似,只是Java中的包是为了分类管理类,但是关键字都是package。

• 在一个大型项目中,可能有很多模块,而每个模块又有自己的过程、函数等。而这些过程、函数默认是放在一起的(如在PL/SQL中,过程默认都是放在一起的,即Procedures中),这些非常不方便查询和维护,甚至会发生误删除的事件。所以通过使用包就可以分类管理过程和函数。

• 包中还可以自定义自定义类型,从而在过程和函数中可以直接使用自定义变量。

二、包的构成

• 包规范部分

• 包体部分

--包规范定义语法
create or replace package 包名
as |is
    --定义存储过程
    --定义函数
    --定义ref游标类型
end 包名;

--包体定义语法
create or replace package body 包名
is |as
    --实现存储过程
    --实现函数
end 包名;

三、包的实例

• 定义包:

--定义包规范
create or replace package getemp_package
as
    --定义一个游标类型
    type emp_cursor_type is ref cursor;
    --定义一个存储过程
    procedure getemp(p_sal in number,c_emp out emp_cursor_type);
end getemp_package;

--定义包体
create or replace package body getemp_package
as
    --实现存储过程
    procedure getemp(p_sal in number,c_emp out emp_cursor_type)
    as
    begin
        --打开游标
        open c_emp for select * from emp where sal>p_sal;
    end getemp;
end getemp_package;

• 调用包:

set serveroutput on;
declare
    c_out getemp_package.emp_cursor_type;
    v_emp emp%rowtype;
begin
    getemp_package.getemp(p_sal=>900,c_emp=>c_out);
    loop
        fetch c_out into v_emp;
        exit when c_out%notfound;
        dbms_output.put_line(v_emp.empno || '-' || v_emp.ename);
    end loop;
end;

 

posted @ 2022-06-15 00:31  缥缈的尘埃  阅读(627)  评论(0编辑  收藏  举报