本文摘自网络,主要分为三大部分,以了解为目的让大家对包有一个大体的认识:一、包的概念和组成;二、包的优点;三、包和包体的创建。
一、包的概念和组成
包是用来存储相关程序结构的对象,它存储于数据字典中。包由两个分离的部分组成:包头(PACKAGE)和包体(PACKAGE BODY)。包头是包的说明部分,是对外的操作接口,对应用是可见的;包体是包的代码和实现部分,对应用来说是不可见的黑盒。
包中可以包含的程序结构如下所示:
包可以包含的程序结构 相关程序结构的解析说明部分可以出现在包的三个不同的部分:出现在包头中的称为公有元素,出现在包体中的称为私有元素,出现在包体的过程(或函数)中的称为局部变量。它们的性质有所不同,如下所示。
说明部分(不止包头)在包体中出现的过程或函数,如果需要对外公用,就必须在包头中说明,包头中的说明应该和包体中的说明一致。
二、包的优点
包可以方便地将存储过程和函数组织到一起,每个包又是相互独立的。在不同的包中,过程、函数都可以重名,这解决了在同一个用户环境中命名的冲突问题。
包增强了对存储过程和函数的安全管理,对整个包的访问权只需一次授予。
在同一个会话中,公用变量的值将被保留,直到会话结束。
区分了公有过程和私有过程,包体的私有过程增加了过程和函数的保密性。
包在被首次调用时,就作为一个整体被全部调入内存,减少了多次访问过程或函数的I/O次数。(为了了解这个含义,我特地探讨了一下。这是当程序首次调用包内函数或过程时,ORACLE 将整个包调入内存,当再次访问包内元素时,ORACLE直接从内存中读取,而不需要进行磁盘 I/O 操作,从而使程序执 行效率得到提高。简而言之就是一次载入,多次使用。)
三、包和包体的创建
关于包和包体的创建,我暂时不是很理解,所以目前先把一些简要语句摘取如下,供日后使用时增进了解再来改善。
创建包头的简要语句如下:
包头语句创建包体的简要语法如下:
包体语句在SQL*Plus环境下,包和包体可以分别编译,也可以一起编译。如果分别编译,则要先编译包头,后编译包体。如果在一起编译,则包头写在前,包体在后,中间用“/”分隔。
可以将已经存在的存储过程或函数添加到包中,方法是去掉过程或函数创建语句的CREATE OR REPLACE部分,将存储过程或函数复制到包体中 ,然后重新编译即可。
如果需要将私有过程或函数变成共有过程或函数的话,将过程或函数说明部分复制到包头说明部分,然后重新编译就可以了。
资料来源:https://blog.csdn.net/u013249984/article/details/77651549?utm_source=app
网友评论