前言: 包(package)的主要作用是用于逻辑组合相关的pl/sql类型,比如记录类型或者集合类型,pl/sql游标或者游标声明以及pl/sql子程序,还可以包含任何可以在块的声明区中定义的变量。一旦创建了一个包,包就会被存储在Oracle数据库中。可以将包放到共享池中,以便被多个应用程序共享和调用。一个pl/sql包包括包规范和包体两部分。平时调试经常使用的dbms_output就是oracle的一个系统包。
一>一个简单的包的包规范和包体小例子create or replace package emp_pkg as
-----定义集合类型
type emp_tab is table of emp%rowtype index by binary_integer;
-----在包规范中定义一个记录类型
type emprectyp is record(emp_no number,sal number);
----定义一个游标申明
cursor desc_salary return emp;
----定义雇佣员工的过程
procedure hire_employee(p_empno number,p_ename varchar2,p_job varchar2,p_mgr number,p_sal number,p_comm number,p_deptno number);
-----定义解雇员工的过程
procedure fire_employee(p_emp_id number);
end emp_pkg;
create or replace package body emp_pkg
as
-----定义游标申明的游标体
cursor desc_salary return emp is select * from emp order by sal desc;
-----定义雇佣员工的具体实现
procedure hire_employee(p_empno number,p_ename varchar2,p_job varchar2,p_mgr number,p_sal number,p_comm number,p_deptno number) is
begin
insert into emp (empno) values('3360');
end;
----定义解雇员工的具体实现
procedure fire_employee(p_emp_id number) is
begin
----从emp表中删除员工信息
delete from emp where empno=p_emp_id;
end;
end emp_pkg;
二>dbms_job包创建定时任务使用
create table t(
id varchar2(30),
name varchar2(30)
);
create or replace procedure proce_t is
begin
insert into t(id, name) values('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'));
commit;
end proce_t;
/
declare
jobno number;
begin
dbms_job.submit(jobno,'proce_t;',sysdate,'sysdate+1/24/60');
commit;
end;
select * from user_jobs;
select * from t;