程序包
之前我们调用的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; /