前言: 包(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;