oracle學習筆記(二十一) 程序包

程序包

以前咱們調用的dbms_output.put_line(''),dbms_output就是一個程序包函數

程序包建立語法

1. 聲明程序包

--聲明程序包中的過程,函數,自定義的類型
--程序包裏面的過程和函數不須要使用create or repalce
create or replace package dbms_my
is
    record類型等。
    procedure $procedure_name$ [(參數...)];
    function $function_name$ [(參數...)]
    ......
end dbms_my;

2. 實現程序包

create or replace package body dbms_my
is
    procedure <過程名>
    is
    ......
end dbms_my;

程序包例子

--建立程序包
create or replace package dbms_my
is
    --至關於自定義一個類
    TYPE type_my_rec is record(
        empno number,
        ename varchar2(10),
        sal number
    );
    procedure sum_sal(deptno department.deptno%type,sum in out number); 
    function avg_sal(deptno department.deptno%type) return  number;
end dbms_my;

--實現程序包
create or replace package body dbms_my
is
    procedure sum_sal(p_deptno department.deptno%type,sum in out number)
    is 
        sum number;
    begin
        select sum(sal) into sum from employee where deptno=p_deptno;
    end sum_sal;
    
    function avg_sal(deptno department.deptno%type) return  number
    is
        result number;
    begin
        select avg(sal) into result from employee where deptno=p_deptno;
        return result;
    end avg_sal;
end dbms_my;    

--測試程序包
declare
    --使程序包中定義的記錄類型來聲明變量
    emp_rec dbms_my.type_my_rec;
    v_deptno number default 7879;
    sum_sal number;
    avg_sal number;
    x varchar2(100) := 'default value';
begin
    emp_rec.empno := 7879;--給類中的某個屬性賦值
    sum_sal := dbms_my.sum_sal(deptno);--調用過程
    dbms_output.put_line(sum_sal);--輸出結果
    select dbms_my.avg_sal(7879) into avg_sal from dual;--調用函數
    dbms_output.put_line(avg_sal);--輸出結果
end;
/
相關文章
相關標籤/搜索