美文网首页
Package 包

Package 包

作者: forever_smile | 来源:发表于2017-08-30 09:05 被阅读0次

转载:blog.itpub.net/26435490/viewspace-1078212/

包的组成

包头(package):包头部分申明包内数据类型,常量,变量,游标,子程序和异常错误处理,这些元素为包的公有元素。

包主体(package body):包主体则是包定义部分的具体实现,它负责为包头中所声明子程序提供具体的实现,在包主体中还可以声明包的私有元素。

包头和包主体分开编译,并作为两个分开的对象分别存放在数据库字典中。

二  包的语法规则

包头的语法如下:

create or replacepackage 包名

As|IS

procedure 过程名();

Function函数名()return数据类型;

变量定义;

异常定义;

光标定义;

...........

...........

End包名;

包体创建的语法:

create or replace PackageBody包名

As|IS

Procedure 过程定义;

Procedure 过程定义;

Function函数定义;

Function函数定义;

.........;

end包名;

三 包的应用与举例

下面是student 和SC表的定义:

CREATE TABLE Student

(Sno CHAR(9)PRIMARY KEY,

Sname CHAR(20)NOTNULL,

Ssex CHAR(4),

Sage SMALLINT,

Sdept CHAR(20))tablespace starivespace;

CREATE TABLE SC

(Sno CHAR(9)NOTNULL,

Cno CHAR(6)NOTNULL,

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_gradeas

procedure print_sdept(psnochar);

procedure print_grade(psnochar);

end;

/

程序包已创建。

创建包体

createorreplace

packagebodysdept_or_grade

as

procedure print_sdept(psnochar)as

psdept student.sdept%type;

begin

selectsdeptintopsdept

fromstudent

wheresno=psno;

dbms_output.put_line(psdept);

exception

when no_data_foundthen

dbms_output.put_line(\'Invalid student number\');

end;

procedure print_grade(psnochar)as

pgrade SC.grade%type;

cursor printgradeisselectgradeintopgrade

fromsc

wheresno=psno;

begin

open printgrade;

loop

fetch printgradeintopgrade;

dbms_output.put_line(pgrade);

exitwhen printgrade%notfound;

endloop;

close printgrade;

exception

when no_data_foundthen

dbms_output.put_line(\'Invalid student number\');

end;

end;

/

程序包体已创建。

获取结果

SQL>setserveroutputon;

SQL>

SQL>executesdept_or_grade.print_sdept(\'0201\');

cs

PL/SQL 过程已成功完成。

SQL>

SQL>executesdept_or_grade.print_grade(\'0201\');

89

64

50

50

PL/SQL 过程已成功完成。

四  心得体会

从以上例子,和以往在实际应用中额经验,对包的优点总结如下:

第一包可以简化应用程序设计:程序包的说明部分和包体部分可以分别创建各编译。体现在以下三个方面:

1)在设计一个应用程序,只创建各编译程序包的说明部分,然后再编写引用该程序包的PL/SQL块。

2)当完成整个应用程序的整体框架后,再回头来定义包体部分。只要不改变包的说明部分,就可以单独调试、增加或替换包体的内容,这不会影响其他的应用程序。

3)更新包的说明后必须重新编译引用包的应用程序,但更新包体,则不需重新编译引用包的应用程序,以快速进行应用程序的原形开发。

第二模块化:可将逻辑相关的PL/SQL块或元素等组织在一起,用名称来唯一标识程序包。把一个大的功能模块划分人适当个数小的功能模块,分别完成各自的功能。这样组织的程序包都易于编写,易于理解更易于管理。

第三效率高:程序包在应用程序第一次调用程序包中的某个元素时,ORACLE将把整个程序包加载到内存中,当再次访问程序包中的元素时,将直接从内在中读取,而不需要进行磁盘I/O操作而影响速度,同时位于内在中的程序包可被同一会话期间的其它应用程序共享。因此,程序包增加了重用性并改善了多用户、多应用程序环境的效率。

最后还有提到一点:信息隐藏。因为包中的元素可以分为公有元素和私有元素。公有元素可被程序包内的过程、函数等的访问,还可以被包外的PL/SQL访问。但对于私有元素只能被包内的过程、函数等访问。对于用户,只需知道包的说明,不用了解包休的具体细节(由于时间关系,明天继续贴出“信息隐藏”的相关例子)。

相关文章

  • Java_basic_5: 包/package

    包/package 包的作用 管理Java文件 解决同名文件冲突 包的定义 格式: package package...

  • Package 包

    转载:blog.itpub.net/26435490/viewspace-1078212/ 一包的组成 包头(pa...

  • 包package

    package: 对类文件进行分类管理 给类提供多层命名(名称)空间 写在程序文件的第一行 package tes...

  • 包package

    -〉就是命名空间,-〉包的声明在必须注释代码的第一行-〉类的全名

  • go学习笔记(包和工具)

    包 Package: 每一组文件被称为一个包,包关键词 package,如:package net/http 所有...

  • Java中的包与导入

    包(package) 包(package)用于将完成不同功能的类分类,放在不同的目录(包)下。 包的命名 包的命...

  • Java基础之包与修饰符

    包用关键字package定义,格式是package+包名称,最好是小写,如:package com.how2jav...

  • 更新管理

    apt-cache search package 搜索包 apt-cache show package 获取包的相...

  • linux 命令apt-get

    apt-cache search package 搜索包apt-cache show package 获取包的相关...

  • octave

    安装包 pkg install -forge package_name加载包 pkg load package_name

网友评论

      本文标题:Package 包

      本文链接:https://www.haomeiwen.com/subject/qrszdxtx.html