1.程序包概述
程序包是对相关过程,函数,变量,游标和异常等对象的封装
程序包由规范(包头)和主体(包体)两部风组成
规范中可以声明程序包中公共对象。
包括类型、变量、常量、异常、游标规范和子程序规范等
主体中可以声明程序包私有对象和实现在包规范中声明的子程序和游标
2.创建程序包的语法
包头和包体名字一致
程序包规范语法:
--创建包定义:
CREATE [OR REPLACE] PACKAGE 名字
IS|AS
变量、常量及数据类型定义;
游标定义头部;
函数、过程的定义和参数列表以及返回类型;
end [包名];
--创建包体:
CREATE [OR REPLACE] PACKAGE BODY 包名
is/as
PROCEDURE 过程名(参数) is/as
begin
过程体;
end [过程名];
function 函数名(参数) return 类型 is/as
begin
函数体;
end [函数名];
end;
程序实现
--定义包头
create OR REPLACE PACKAGE PACK1
IS
AA NUMBER :=9; --可以被调用
PROCEDURE INSERT_DEPT(V_DEPT IN DEPT%ROWTYPE);
FUNCTION FUN(V1 NUMBER,V2 NUMBER) RETURN NUMBER;
END;
--包体实现
create or REPLACE PACKAGE BODY PACK1
IS
BB NUMBER:=10; --不可以被调用
PROCEDURE INSERT_DEPT(V_DEPT IN DEPT%ROWTYPE)
IS
BEGIN
INSERT INTO DEPT VALUES(v_dept.deptno,v_dept.dname,v_dept.loc);
END;
FUNCTION FUN(V1 NUMBER,V2 NUMBER) RETURN NUMBER
IS
BEGIN
RETURN V1+V2;
END;
END;
调用:包名.元素名;
begin
--dbms_output.put_line(pack1.bb); --报错
dbms_output.put_line(pack1.AA); --9
dbms_output.put_line(pack1.FUN(1,2));--3
end;
3.程序包中的游标
游标的定义分为游标规范和游标主体两部分
在包规范中声明游标规范时必须使用return子句指定游标的返回类型
return 数据类型;
RETURN子句指定的数据类型可以是:
用 %ROWTYPE 属性引用表定义的记录类型
程序员定义的记录类型,例如 TYPE EMPRECTYP IS RECORD(emp_id INTEGER,salary REAL) 来定义的。
不可以是number, varchar2, %TYPE等类型。
create or replace package pack2 is
cursor mycursor return emp%rowtype;
procedure mycursor_use;
end;
create or replace package body pack2 is
cursor mycursor return emp%rowtype is select * from emp;
procedure mycursor_use
is
v_emp emp%rowtype;
begin
open mycursor;
fetch mycursor into v_emp;
while mycursor%found loop
dbms_output.put_line(v_emp.ename);
fetch mycursor into v_emp;
end loop;
close mycursor;
end;
end;
--ref游标
create or replace package pack3 is
type refcur is ref cursor;
procedure mycursor_use;
end;
create or replace package body pack3 is
procedure mycursor_use
is
mycursor refcur;
v_emp emp%rowtype;
begin
open mycursor for select * from emp;
fetch mycursor into v_emp;
while mycursor%found loop
dbms_output.put_line(v_emp.ename);
fetch mycursor into v_emp;
end loop;
close mycursor;
end;
end;
11.oracle包详解
最新推荐文章于 2023-06-29 16:32:16 发布