包
包用于逻辑组合相关的PL/SQL类型、项、子程序,它由包规范(create package)和包体(package body)两部分组成。
当建立包时,需要首先建立包规范,然后再建立包体。
====================================================================================================
包规范语法格式:
create or replace package package_name package_name 是包名,IS 开始的部分用于定义公共组件。
is
public type and item declarations
subprogram specificationsEND package_name;
end;
eg
create or replace package emp_package IS
g_deptno number(3):=30; ------公有变量;
procedure add_employee(eno number,empname varchar2,salary number,dno number default g_deptno);
procedure fire_employee(eno number);
function get_sal(eno number) return number;
end emp_package;
==================================================================================================
包体语法格式:
create or replace package body package_name
is
private type and item declareions
subprogram bodies;
end package_name;
eg:
create or replace package body emp_package is
function validate_deptno(v_deptno number) return boolean
is
v_temp int;
begin
select 1 into v_temp from dept where deptno=v_deptno;
return true;
Exception
when no_date_found then
return false;
end;
procedure add_employee(eno number,empname varchar2,sal number,dno number default g_deptno)
is
begin
if validate_deptno(dno) then
insert into emp(empno,ename,sal,deptno) values (eno,name,salary,dno);
else
raise_application_error(-20010,'不存在该部门');
end if;
end;
function get_sal(eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emo where empno=eno;
return v_sal;
Exception
when no_data_found then
raise_application_error(-20012,'该雇员不存在');
end;
end emp_package;
===========================================================================================================
调用包组件
对于包的私有组件,只能在包内调用,并且可以直接调用;
对于包的公有组件,既可以在包内调用,也可以在其他应用程序中调用,
当在其他应用程序中调用包的组件时,必须要加包名作为前缀(包名.组件名)
(a).在同一个包内调用包组件
当调用同一包内的其他组件时,
包用于逻辑组合相关的PL/SQL类型、项、子程序,它由包规范(create package)和包体(package body)两部分组成。
当建立包时,需要首先建立包规范,然后再建立包体。
====================================================================================================
包规范语法格式:
create or replace package package_name package_name 是包名,IS 开始的部分用于定义公共组件。
is
public type and item declarations
subprogram specificationsEND package_name;
end;
eg
create or replace package emp_package IS
g_deptno number(3):=30; ------公有变量;
procedure add_employee(eno number,empname varchar2,salary number,dno number default g_deptno);
procedure fire_employee(eno number);
function get_sal(eno number) return number;
end emp_package;
==================================================================================================
包体语法格式:
create or replace package body package_name
is
private type and item declareions
subprogram bodies;
end package_name;
eg:
create or replace package body emp_package is
function validate_deptno(v_deptno number) return boolean
is
v_temp int;
begin
select 1 into v_temp from dept where deptno=v_deptno;
return true;
Exception
when no_date_found then
return false;
end;
procedure add_employee(eno number,empname varchar2,sal number,dno number default g_deptno)
is
begin
if validate_deptno(dno) then
insert into emp(empno,ename,sal,deptno) values (eno,name,salary,dno);
else
raise_application_error(-20010,'不存在该部门');
end if;
end;
function get_sal(eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emo where empno=eno;
return v_sal;
Exception
when no_data_found then
raise_application_error(-20012,'该雇员不存在');
end;
end emp_package;
===========================================================================================================
调用包组件
对于包的私有组件,只能在包内调用,并且可以直接调用;
对于包的公有组件,既可以在包内调用,也可以在其他应用程序中调用,
当在其他应用程序中调用包的组件时,必须要加包名作为前缀(包名.组件名)
(a).在同一个包内调用包组件
当调用同一包内的其他组件时,