包的介绍:
一 包的组成:
-
包头(package):包头部分申明包内数据类型,常量,变量,游标,子程序和异常错误处理,这些元素为包的公有元素。
-
包主体(package body):包主体则是包定义部分的具体实现,它负责为包头中所声明子程序提供具体的实现,在包主体中还可以声明包的私有元素。
-
包头和包主体分开编译,并作为两个分开的对象分别存放在数据库字典中。
二 包的语法规则
包头的语法如下:
create or replace package 包名
As | IS
procedure 过程名();
Function 函数名() return 数据类型;
变量定义;
异常定义;
光标定义;
...........
...........
End 包名;
创建包体的语法:
create or replace Package Body 包名
As | IS
Procedure 过程定义;
Procedure 过程定义;
Function 函数定义;
Function 函数定义;
.........;
end 包名;
下面是student和SC表的定义:
-
CREATE TABLE Student
-
(Sno CHAR(9) PRIMARY KEY,
-
Sname CHAR(20) NOT NULL,
-
Ssex CHAR(4),
-
Sage SMALLINT,
-
Sdept CHAR(20)) tablespace starivespace;
-
-
-
CREATE TABLE SC
-
(Sno CHAR(9) NOT NULL,
-
Cno CHAR(6) NOT NULL,
-
Grade SMALLINT,
-
PRIMARY KEY (Sno,Cno),
-
constraint f1 FOREIGN KEY (Sno) REFERENCES Student(Sno),
-
FOREIGN KEY (Cno) REFERENCES Course(Cno)
-
) tablespace starivespace
定义一个包,实现如果功能: 输入学号,分别返回该学生的所在系和相应的选课成绩(如果有多门成绩,那么就输出多门成绩)。
下面开始定义包头:
-
create or replace
package sdept_or_grade as
procedure print_sdept(psno char);
procedure print_grade(psno char);
end;
/
-
-
-
程序包已创建。
创建程序包体:
-
create or replace
-
package body sdept_or_grade
-
as
-
procedure print_sdept(psno char) as
-
psdept student.sdept%type;
-
begin
-
select sdept into psdept
-
from student
-
where sno=psno;
-
dbms_output.put_line(psdept);
-
exception
-
when no_data_found then
-
dbms_output.put_line(\'Invalid student number\');
-
end;
-
procedure print_grade(psno char) as
-
pgrade SC.grade%type;
-
cursor printgrade is select grade into pgrade
-
from sc
-
where sno=psno;
-
-
begin
-
open printgrade;
-
loop
-
fetch printgrade into pgrade;
-
dbms_output.put_line(pgrade);
-
exit when printgrade%notfound;
-
end loop;
-
close printgrade;
-
exception
-
when no_data_found then
-
dbms_output.put_line(\'Invalid student number\');
-
end;
-
end;
-
/
现在,执行这2个过程的时候,我们就会获取结果:
-
SQL> set serveroutput on;
-
SQL>
-
SQL> execute sdept_or_grade.print_sdept(\'0201\');
-
cs
-
-
PL/SQL 过程已成功完成。
-
-
SQL>
-
SQL> execute sdept_or_grade.print_grade(\'0201\');
-
89
-
64
-
50
-
50
-
-
PL/SQL 过程已成功完成。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26435490/viewspace-1078206/
,如需转载,请注明出处,否则将追究法律责任。