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;
/
posted @ 2019-06-03 21:01  Stars-one  阅读(578)  评论(0编辑  收藏  举报