Oracle基础<4>--程序包
一:程序包定义(包括1.程序包规范 2.程序包主体)
程序包是一种数据库对象,它是对相关pl/sql 类型、子程序、游标、异常、变量和常量的封装。
1、程序包规范:可以声明类型、变量、常量、异常、游标和子程序。
2、程序包主体:可以实现在程序包规范中定义的游标、子程序。
二:程序包规范
程序包规范包含一些应用程序课件的公共对象和类型的声明它是应用程序的借口。规范包含应用程序所需的资源,如果程序包规范只声明类型、常量、变量和异常,则不需要有程序包主体。只有子程序和游标才具有程序包主体。
语法:
creat [or replace] package package_name --包名称
[is | as]
[public type and item declations] --声明公共类型、常量、变量、异常和游标等
[subprogram specifications] --声明pl/sql子程序,也就是存储过程和和函数
end [package_name];
--程序包规范的声明
CREATE OR REPLACE PACKAGE PACKAGE_ME IS
PROCEDURE PRO_EMP_SELECT(ENO NUMBER); --声明一个存储过程:根据员工编号查询员工信息
FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER; --声明一个函数,根据员工编号查询员工工资。
END PACKAGE_ME;
三:程序包主体
语法:
create [or replace] package body package_name
is|as
[public type and item declarations]--声明变量、常量、游标、异常或类型
[subprogram bodies] --定义公共和私有PL/SQL子程序。
[begin
initialization_statements] --程序包中规范代码的实现。
end [package_name];
--创建程序包主体,提供程序包内容的实现,和存储过程、函数的声明一致
CREATE OR REPLACE PACKAGE BODY PACKAGE_ME IS
PROCEDURE PRO_EMP_SELECT(ENO NUMBER) AS
V_NAME EMP.ENAME%TYPE;
V_SAL EMP.SAL%TYPE;
BEGIN
SELECT ENAME, SAL INTO V_NAME, V_SAL FROM EMP WHERE EMPNO = ENO;
DBMS_OUTPUT.PUT_LINE('name:' || V_NAME || ' sal:' || V_SAL);
END PRO_EMP_SELECT;
FUNCTION FUN_EMP_SELECT(ENO NUMBER) RETURN NUMBER AS
V_SAL EMP.SAL%TYPE;
BEGIN
SELECT SAL INTO V_SAL FROM EMP WHERE EMPNO = ENO;
RETURN V_SAL;
END FUN_EMP_SELECT;
END PACKAGE_ME;
四、调用程序包
DECLARE
v_sal emp.sal%TYPE;
BEGIN
package_me.PRO_EMP_SELECT(7788); --调用方式和调用存储过程方式一样,不过需要在存储过程前添加程序包名
v_sal := package_me.FUN_EMP_SELECT(7788); --调用方式和调用函数方式一样,不过需要在函数前添加程序包名
dbms_output.put_line(v_sal);
END;