程序包
之前我们调用的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;
/
转载于:https://www.cnblogs.com/chaoyang123/p/11549617.html