1、定义
包:(1)被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存。
    (2)包中的任何函数或存储过程的子程序访问速度将大大加快。
    (3)包由两个部分组成:包头和包体,在包头中描述变量、常量、游标、和子程序。
    (4)包体由完整的子程序,游标定义组成。
2、创建包
包头:
CREATE OR REPLACE PACKAGE test_pkg IS
PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER);
FUNCTION ann_income(e_name VARCHAR2) RETURN NUMBER;
END;
--定义了一个函数和一个过程
包体:
CREATE OR REPLACE PACKAGE BODY test_pkg IS
PROCEDURE update_sal(e_name VARCHAR2,newsal NUMBER)
IS
BEGIN
UPDATE emp1 SET sal=newsal WHERE ename=e_name;
END;
FUNCTION ann_income(e_name VARCHAR2)
RETURN NUMBER IS
annsal NUMBER;
BEGIN
SELECT sal*12+NVL(comm,0) INTO annsal FROM emp1
WHERE ename=e_name;
RETURN annsal;
END;
END;
--实现上面的函数和过程
3、调用
对包内共有元素的调用格式为:包名,元素名称。
对包内过程调用
SQL> exec test_pkg.update_sal('SCOTT',1200);
对包内函数调用
DECLARE
v_annsal NUMBER(7,2);
BEGIN
v_annsal:=test_pkg.ann_income('SCOTT');
dbms_output.put_line('年薪为:'||v_annsal);
END;
4、删除包
我们可以 DROP PACKAGE 命令对不需要的包进行删除,语法如下:
DROP PACKAGE [BODY[user.]package_name;