- 程序包
(1)包是一种将过程、函数和数据结构捆绑在一起的容器,当包中任何函数或存储过程被调用,包就被加载入内存。
(2)包中的任何函数或存储过程的子程序访问速度将大大加快。
(3)包由两个部分组成:包头和包体,在包头中描述变量、常量、游标、和子程序。
(4)包体由完整的子程序,游标定义组成。
(5)可以简化应用设计、提高应用性能、实现信息隐藏、子程序重载
(6)需要先创建package(也就是包的定义),再创建body。增加包中的过程或者修改包中过程的输入参数个数等也是要先改package再改body。
- 组成
规范(Package)
即包头,相当于Java中的包,封装很多的函数以及过程--接口
主体(Package Body)
包里面具体的实现函数以及过程 --实现接口
- 语法
规范语法
create or replace package 包名
as
begin
-- 定义函数,过程,游标类型
...
end;
主题语法
create or replace package body 包名
as
begin
--实现函数,过程,游标类型
...
end
调用
begin
包名.过程名(值);
end
示例:
以下内容为转载:
参考链接:
Oracle中包(PACKAGE)的使用方法
- 创建包示例:
包头--定义了一个函数和一个过程:
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;
- 调用包示例:
对包内共有元素的调用格式为:包名.元素名称。
对包内过程调用:
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;
- 删除包示例
删除包:
DROP PACKAGE BODY [user.]package_name;
DROP PACKAGE [user.]package_name;
网友评论