第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

1 第 5 章 SQL 语句基础 在 Oracle 数据库中,为了方便管理用户所创建的 数据库对象,引入了模式的概念,这样用户所创建的 数据库对象就都属于该用户模式。对于一般的用户而 言,数据库中的数据是以表、视图行等方式存储的( 表和视图就是最基本的用户模式对象),用户只需要 根据自己的需求查询数据库,然后由数据库根据请求.
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
MySQL 基础技能与原理 —— 基础技能 MySQL DBA Team 彭立勋( )
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
SQL的简单查询.
十一 ASP对数据库的访问.
  中国技术交易信息服务平台 中国技术市场管理促进中心.
OceanBase 0.4:从API到SQL 日照
第四章 数据库对象.
Access数据库程序设计 总复习.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
資料庫 (Database) SQL Server 2008實作
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
Chap 13 視界與資料庫程式設計.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
第5章 数据库保护 之事务.
Oracle数据库 Oracle 子程序.
資料庫管理 資管二 賴柏融.
PL/SQL程序设计 过程, 函数 Trigger 对象关系数据库技术.
数据库应用与程序设计.
主机DB2数据库应用与编程 任课老师:王湖南 四川大学计算机(软件)学院.
第五讲 利用视图进行查询优化.
JAVA 程式設計與資料結構 第十一章 JDBC.
Oracle数据库入门.
第十五章 常見的資料庫管理系統 目的 Oracle 微軟SQL Server 微軟Access MySQL Oracle 應用伺服器
数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华.
第四章:触发器   触发器类似于过程、函数,因为它们都是拥有说明部分、语句执行部分和异常处理部分的有名的PL/SQL块。与包类似,触发器必须存储在数据库中,并且不能被块进行本地化说明。但是,对于过程而言,可以从另一个块中通过过程调用显式地执行一个过程,同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器,并且触发器不接受参数。
建立/修改/刪除資料庫 資料庫組成檔案 建立資料庫: 資料(庫)檔案 交易記錄檔 使用Enterprise Manager工具 自助法:
第六章 學習SQL語言.
ORACLE 第五讲 PL/SQL编程基础.
課程名稱:資料庫系統 授課老師:李春雄 博士
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
第 11 章 建立檢視表.
第三章 关系数据库标准查询语言SQL 3.1 SQL概述 3.2数据定义语言(DDL) 3.3 SQL的数据查询(DML)
資料庫安全 (Database Security)
数据库实验指导(一)
第16讲 数据库系统的增强安全性 第7章:数据库系统的增强安全性.
Transact-SQL 語言設計教學.
課程名稱:資料庫系統 授課老師:李春雄 博士
SQL Server 2000 数据库入门.
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
SQL SERVER 一些经典语句 1.
实验4:PL-SQL编程 1.实验目的 2.实验原理 PL/SQL是一种过程化语言,属于第三代语言,本实验在与熟悉使用PL/SQL编程.
医院职工公费医疗系统.
第四讲 数据库对象(视图、序列、同义词、索引)
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
数据库应用技术 SQL Server 2005.
第20章 MySQL数据库.
数据库技术与应用.
ORACLE 第九讲 触发器.
第六章 VHDL设计共享.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
CS, ZJU 4/18/2019 Chapter 7 数据库.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
第 15 章 自訂函數與順序物件.
SQL查询语句 蔡海洋.
OceanBase 0.4:从API到SQL 日照
第三章 SQL Server数据管理.
Oracle Database 10g基础教程 清华大学出版社
第9章 存储过程的创建和使用 9.1 存储过程简介 9.2 创建存储过程 9.3 修改存储过程 9.4 删除存储过程 9.5 执行存储过程.
第六章 类属B树索引技术 对基于树的索引方法给出一种通用算法。该算法是建立在类属B树的概念之上开发的。它将类型系统开放,使系统能支持用户自定义的数据类型、函数和某些特殊的查询谓词的集合。并且,将新的数据类型、函数、查询谓词等登记到数据库管理系统中,
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
ORACLE之SQL*PLUS的格式化输出
Principle and Technology of Database
第4章 数据查询.
Presentation transcript:

第三章:包   包(package)是一个可以将相关对象存储在一起的PL/SQL结构。包包含了两个分离的部件------包说明(specification)和包主体(body)。每个部件都单独被存储在数据字典中。包只能存储在数据库中,不能是本地的。除了可以将相关对象作为一组存在一起以外,包也是十分有用的,因为它们在依赖性方面的限制是比较小的。也有许多性能上的优点。

1.包的组成 将相关的若干程序结构组织到一块,用一个包来标识这个集合。 程序单元 描述   将相关的若干程序结构组织到一块,用一个包来标识这个集合。 程序单元 描述 ____________________________________________________ 过程(procedure) 带有参数的程序 函数(Function) 带有参数的程序,该程序只返回一个 值 变量(Variable) 用于存储变化值的存储单元 游标(Cursor) 指向一个 SQL语句的指针 常量(Constant) 指向常数的指针 异常情况(Exception) 标志一个异常情况

包说明是操作接口,对应用可见;包主体是黑盒,对应用隐藏实现细节

包由说明部分和包主体两部分组成,在包的说明部分说明的元素(过程、函数等)是公共元素,只在包主体中说明的元素是私有元素。   元素的性质 描 述 在包中的位置 公共的(public) 在整个应用的全过 包的说明部分说明, 程均有效 并在包主体中具体定 义它 私有的(private) 对包以外的过程和 在包主体部分说明 函数是不可见的 和定义 局部的 只在一个过程或函 在所属过程或函数的 数内部可用 内部说明和定义  

注释: ● 标识符(变量、游标、常量、异常处理)可以是公共、私有或局部的。   ● 程序(过程、函数)可以是公共的或私有的。 ● 标识符(变量、游标、常量、异常处理)可以是公共、私有或局部的。 在包说明部分说明的所有对象在包的外面都是可用的并且是可见的。只需指定该包的名字就可以访问该对象了。

2.开发包 按下述步骤开发一个包,注意这和过程的开发相似。 ●在一个文本文件中写入 CREATE PACKAGE 语句 以说明一个包。   按下述步骤开发一个包,注意这和过程的开发相似。 ●在一个文本文件中写入 CREATE PACKAGE 语句 以说明一个包。 ●用 CREATE PACKAGE BODY语句创建包体。 ● 在 SQL*plus或 SVRMGR中运行这两个文本文件, 以将包的源代码编译成编译代码(P-Code),并将这 两种代码存人数据库中。 ●从ORACLE环境,或者从一个独立的函数或过程调 用一个包内的公共元素。

注释:   ●也可将 CREATE PACKAGE语句和 CREATE PACKAGE BODY语句 写入同一个文本文件中。

★ 创建包说明的语法: CREATE [OR REPLACE] PACKAGE [模式名.]包名 {IS | AS} PL/SQL块 包说明   CREATE [OR REPLACE] PACKAGE [模式名.]包名 {IS | AS} PL/SQL块 包说明 例1: CREATE OR REPLACE PACKAGE emp_actions AS PROCEDURE hire_employee(ename CHAR ...); PROCEDURE fire_employee(emp_id NUMBER ...); FUNCTION … END emp_actions; /

例2:制作一个包说明 生成一个管理雇员薪水的包,其中包括一个为雇员加薪的过程,并且在包中还有一个记录所有雇员薪水增量的全局变量。   生成一个管理雇员薪水的包,其中包括一个为雇员加薪的过程,并且在包中还有一个记录所有雇员薪水增量的全局变量。 CREATE PACKAGE sal_package IS PROCEDURE raise_sal(v_empno emp.empno%TYPE, v_sal_increment emp.sal%TYPE); v_delta_sal emp.sal%TYPE; END sal_packages;    

  ★ 创建包主体的语法: CREATE [OR REPLACE] PACKAGE BODY [模式名.]包名{IS | AS} PL/SQL包说明

CREATE OR REPLACE PACKAGE BODY emp_actions AS 例:   CREATE OR REPLACE PACKAGE BODY emp_actions AS PROCEDURE hire_employee(ename CHAR ...) BEGIN 过程语句 END hire_employee; PROCEDURE fire_employee(emp_id NUMBER ...) END emp_actions; /

在创建公共过程时使用私有过程可以使代码模块化和清晰化。可以在包主体的开始定义一个私有过程,以初始化所有全局变量。   例子:制作一个包体。 创建一个私有函数以简化过程 RAISE_SAL的代码,同时创建一个用来初始化全局变量 V_DELTA_SAL的过程。

CREATE PACKAGE BODY sal_paCkage IS   FUNCTION get_sal(v_empno emp.empno%type) Return number Is V_empsal emp.sal%type:=0; Begin Select sal Into v_empsal From emp Where empno=v_empno; Return(v_empsal); End;

PROCEDURE raise_sal(v_empno emp.empno% TYPE, v_sal_increment emp.sal%TYPE) IS v_old_sal emp.sal% TYPE; BEGIN v_old_sal:=get_sal(v_empno); UPDATE emp SET sal=sal十v_sal_increment WHERE empno=v_empno; COMMIT WORK; v_delta_sal:=v_delta_sal十v_sal_incrernent; END raise_sal;   END sal_package; /

注意:包说明部分是必需的,而包主体部分是可选的。 注释:   ● 包中 NUMBER型变量缺省初始化值为0, VARCHAR2型变量缺省初始化值为空。 注意:包说明部分是必需的,而包主体部分是可选的。 过程和函数的说明在包说明和包主体部分应该是 相同的。包括过程、函数的名字、参数的名字以 及参数的模式。

3.包的管理 包的存储和一个单独的过程存储一样。 内 容 命令 创建一个新的包说明信息 CREATE PACKAGE   包的存储和一个单独的过程存储一样。 内 容 命令 创建一个新的包说明信息 CREATE PACKAGE 创建一个新的包主体 CREATE PACKAGE BODY 修改一个已有的包的说明 CREATE OR REPLACE PACKAGE 修改一个已有的包主体 CREATE OR REPLACE PACKAGE BODY 删除包的说明和包主体 DROP PACKAGE 删除包主体 DROP PACKAGE BODY

注释: ●当包的说明被删除或修改时,一般要求把包主体也 删除或做相应修改。 ●当删除或修改包主体时,可以不删除或修改包的说 明。   ●当包的说明被删除或修改时,一般要求把包主体也 删除或做相应修改。 ●当删除或修改包主体时,可以不删除或修改包的说 明。 在管理包时,整个包(包括其中所有的元素)是作为一个逻辑单元进行管理的,其管理命令和方法都与管理单个过程相同。

任务 包 独立过程 文档记录 在数据字典视图 在数据字典视图 USER_SOURCE中 USER_SOURCE中 检查编译错误 在数据字典视图 在数据字典视图 USER_ERRORS中 USER_ERRORS中 开发方法 利用 SQL*Plus 利用 SQL* Plus批文件 批文件 开发权限 需要 CREATE 需要 CREATE PROCEDURE PROCEDURE 系统权限 系统权限  使用权限 需要对包有EXECUTE 需要对过程有EXECUTE 实体特权 实体特权

注释:   ●用 DBMS_OUTPUT系统包中的过程来调试包中的过程。

4.包的调用 ● 从另一个存储子程序调用 emp_actions.hire_employee(name…); ● 从ORACLE工具中调用 SQL> EXECUTE emp_actions.hire_employ(…); ● 远程存取:包名.过程名 @ DB链路名

注释: 例子:调用一个公共过程。给7654号雇员加薪$100。   SQL> EXECUTE sal_package.raise_sal(7654,100);   注释: ● 利用包名可以使一个用户的两个不同过程有相同的 名字。 在一个用户对话中可以从任何独立过程中引用包中的公 共变量、游标、常量和异常情况。

注释: 例子:调用包中的变量。当某部门整个薪水的变化超过予算 的,发一条警告信息。 ● 引用包中的变量时,在它前面加上包的名字。   例子:调用包中的变量。当某部门整个薪水的变化超过予算 的,发一条警告信息。 CREATE PROCEDURE warn_sal(v_sal_budget IN emp.sal%TYPE) IS BEGIN IF sal_package.v_delta_sal>v_sal_budget THEN RAISE_APPLICATION_ERROR(-20400, ‘Salary budget exceeded.’); END IF; END warn_sal;   注释: ● 引用包中的变量时,在它前面加上包的名字。

5.包的依赖性   与独立过程一样,尽管包也有自动管理本地依赖性和远程依赖性的机制,但仍建议用户对那些无效的包进行手动地重新编译。

任务 包 独立过程 记录文档 在数据字典的 在数据字典的 DEPENDENCIES DEPENDENCIES 视图里 视图里   手动重新编译 用 ALTER PACKAGE 用 ALTER 命令 PROCEDURE命令 自动重新编译 取决地本地、远程依 取决于本地、远程依 赖性的自动管理机制 赖的自动管理机制

★ 语法——重新编译包体和包说明的定义   ALTER PACKAGE—package name—COMPILE PACKAGE ★ 语法——重新编译包体   ALTER PACKAGE—package name—COMPILE PACKAGE BODY   其中: package name 指包的名字

注释:   ● 当重新编译包说明的定义时,必须对包体重新编译。 ● 当只重新编译包体时,不一定要重编译包说明的定义。

★ 在独立过程中使用包中的元素 如果只改变包主体的定义,而不改变包的说明的定义,那么不影响包主体外的独立过程的有效性。   如果只改变包主体的定义,而不改变包的说明的定义,那么不影响包主体外的独立过程的有效性。 如果改变对包主体说明的定义,则包主体和包外的过程都将是无效的,因为它们都依赖于对包主体说明的定义。

★ 在包中涉及到一个独立过程   如果该独立过程改变了,那么包主体将会无效,但包的说明定义仍然有效。

★ 包的依赖性的自动管理机制 ● 当包的定义发生改变以后,ORACLE 把所有调用该包的其他包的状态置为无效。   ●    当包的定义发生改变以后,ORACLE 把所有调用该包的其他包的状态置为无效。 ●    当用户调用的包的状态发生遗失时,ORACLE将发生一个运行错误。 ●    当包被再次调用时,ORACLE再次说明该包,并初试化变量和游标。

6.包的优点 包除了能规范化应用开发程序以外,还有以下优点: ★ 方便对存储过程和函数的组织 ● 将相关的过程和函数组织在一起。   包除了能规范化应用开发程序以外,还有以下优点: ★ 方便对存储过程和函数的组织 ● 将相关的过程和函数组织在一起。 ● 在一个用户的环境中解决命名的冲突问题。

★ 方便对存储过程和函数的管理   ● 在不改变包的说明定义时可以改变包体的定 义。 ● 限制过程依赖性。 ★ 方便了对存储过程和函数的安全性管理 ● 整个包的访问权限只需一次性授权。 ● 区分共用过程和私有过程。

★ 为用户对话提供状态确认信息   ● 在各种环境和过程中均可引用标识符。 ● 在用户的整个对话中保留标识符的状态。 ★ 改善性能 ● 在包被首次调用时,作为一个整体全部调入内存。 ● 减少多次调用时的磁盘 I/O次数。