Oracle数据库数据编程SQL<3.6 PL/SQL 包(Package)>

包是Oracle数据库中一种重要的PL/SQL程序结构,它将逻辑相关的变量、常量、游标、异常、过程和函数组织在一起,提供了更好的封装性和模块化。在大型项目中,可能有很多模块,而每一个模块又有自己的存过、函数等。而这些存过、函数默认是放在一起的,如果所有的存过函数都是放在一起的那么非常不容易查询和维护,甚至会发生误删除事件。

目录

一、包的组成

1. 包规范(Package Specification)包头、包定义

2. 包体(Package Body)

二、包的优势

三、创建包

1. 包规范语法

2. 包体语法

四、包示例

1. 完整包示例

包规范(emp_pkg.sql):

 包体(emp_pkg_body.sql):

2、完整简单示例

五、包的使用

1. 调用包中的子程序

2. 使用包常量

3. 处理包异常

六、包的重载

七、包的初始化

八、包的持久状态

九、系统内置包

十、最佳实践


一、包的组成

1. 包规范(Package Specification)包头、包定义

  • 定义包的公共接口

  • 声明可供外部访问的对象

  • 不包含具体实现代码

包定义部分声明包内数据类型、变量、常量、游标、子程序和异常错误处理元素,这些元素是包的公有元素。

2. 包体(Package Body)

  • 实现包规范中声明的子程序

  • 可以包含私有对象(仅在包内可见)

  • 实现包初始化代码

包主体则是包定义部分的具体实现,它定义了包定义部分所声明的游标和子程序,在包主体中还可以声明包的私有元素。

包定义和包主体要分开编译,并作为两部分分开的对象存放在数据字典中(user_source/all_source/dba_source),声明的时候包头和包体的变量类型一致,先执行包头,在执行包体。

二、包的优势

  1. 模块化:将相关功能组织在一起

  2. 封装性:隐藏实现细节,暴露清晰接口

  3. 性能提升:首次调用时整个包被加载到内存

  4. 减少依赖:修改包体不会使依赖对象失效

  5. 全局共享:包变量在会话期间保持状态

三、创建包

1. 包规范语法

CREATE [OR REPLACE] PACKAGE package_name
[IS|AS]-- 公共类型和常量声明-- 公共变量声明-- 公共异常声明-- 公共游标声明-- 过程和函数声明
END [package_name];-- 简单举例
create or replace package pak_name as|is
function fun_1(v1 in|out|in out 类型) return 类型;
function fun_2(v2 in|out|in out 类型) return 类型;
……
procedure pro_1(v3 in|out|in out 类型);
procedure pro_2(v4 in|out|in out 类型);
……
end pack_name;

2. 包体语法

CREATE [OR REPLACE] PACKAGE BODY package_name
[IS|AS]-- 私有类型和常量声明-- 私有变量声明-- 私有异常声明-- 私有游标声明-- 过程和函数实现[BEGIN -- 初始化代码]
END [package_name];-- 简单举例
create or replace package body pak_name as|is
function fun_1(v1 in|out|in out 类型) return 类型as|isbegin 要执行的语句;returnend;
function fun_2(v2 in|out|in out 类型) return 类型as|isbegin 要执行的语句;returnend;
……
procedure pro_1(v3 in|out|in out 类型)as|isbegin 要执行的语句;end;
procedure pro_2(v4 in|out|in out 类型)as|isbegin 要执行的语句;end;
……
end pak_name;

四、包示例

1. 完整包示例

包规范(emp_pkg.sql):

CREATE OR REPLACE PACKAGE emp_pkg IS-- 公共常量c_min_salary CONSTANT NUMBER := 5000;-- 公共异常e_invalid_dept EXCEPTION;-- 公共游标CURSOR emp_by_dept_cursor(p_dept_id NUMBER) RETURN employees%ROWTYPE;-- 函数声明FUNCTION get_emp_count(p_dept_id NUMBER) RETURN NUMBER;-- 过程声明PROCEDURE update_salary(p_emp_id IN NUMBER,p_percent IN NUMBER DEFAULT 5,p_rows_updated OUT NUMBER);PROCEDURE hire_employee(p_first_name IN VARCHAR2,p_last_name IN VARCHAR2,p_email IN VARCHAR2,p_job_id IN VARCHAR2 DEF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习 分类算法

【实验名称】 实验:分类算法 【实验目的】 1.了解分类算法理论基础 2.平台实现算法 3. 编程实现分类算法 【实验原理】 分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。 【实验环境】 OS:Ubuntu16.0…

HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板

HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板 这里写目录标题 HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板项目介绍技术栈核心功能实现1. 画板初始化与工具管理2. 多样化绘画工具3. 事件处理机制 技术要点分析1. Canvas上下文优化…

【YOLOv8】YOLOv8改进系列(12)----替换主干网络之StarNet

主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: YOLOv8结构解读 YOLOv8…

1Panel 面板 宝塔面板 Ubuntu 24.04

1Panel 面板 宝塔面板 Ubuntu 24.04 https://1panel.cn/ 1Panel 是一款开源的 Linux 服务器运维管理面板,它就像是给服务器配上了一个智能管家,让我们能通过 Web 端轻松管理服务器。以往我们管理 Linux 服务器,常常需要在命令行中输入各种复…

Node.js全局生效的中间件

目录 1. 目录结构 2. 代码实现 2.1 安装Express 2.2 app.js - 主文件 2.3 globalMiddleware.js - 全局中间件 3. 程序运行结果 4. 总结 在Node.js的Express框架中,全局生效的中间件是指应用程序启动后,对所有请求都有效的中间件。它通常用于日志记…

WiFi(无线局域网)技术的多种工作模式

WiFi(无线局域网)技术支持多种工作模式,以满足不同的网络需求和应用场景。以下是主要的WiFi工作模式及其详细说明: 1. 基础设施模式(Infrastructure Mode) [无线接入点 (AP)]/ | \ [客户端…

PHP 8.x:现代Web开发的性能与效率革命

随着PHP 8.x系列的持续演进,这门诞生于1995年的“古老”语言正焕发新生。通过引入革命性的JIT编译器、类型系统增强及一系列现代化语法特性,PHP 8.x不仅巩固了其在Web开发领域的统治地位,更将性能与开发者体验推向新高度。 一、JIT编译器&am…

【扣子agent入门】搭建计算热量工作流

一、食物热量知识库 1. 创建知识库 工作空间——资源库——创建资源>知识库 2. 自动采集网页数据 文本格式>在线数据 自动采集 找一个食物热量网站进行采集。 一定要让知识按条数分段,不然不好查询。 二、 意图识别节点 意图识别(In…

脑影像分析软件推荐 | JuSpace

目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献: Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…

微信小程序唤起app

1、前提 1、app与小程序主体需一致&#xff0c;可以前往微信公众平台关联。 2、小程序的场景值为1069&#xff0c;也就是得从app打开小程序&#xff0c;小程序才能唤起app。 2、vue3代码示例 <template><view class"maxBox bgc"><button open-typ…

jarvisoj API调用 [JSON格式变XXE]

http://web.jarvisoj.com:9882/ 题目要求&#xff1a;请设法获得目标机器 /home/ctf/flag.txt 中的flag值 抓包得到&#xff1a; POST /api/v1.0/try HTTP/1.1 Host: web.jarvisoj.com:9882 Content-Length: 36 Accept-Language: zh-CN,zh;q0.9 User-Agent: Mozilla/5.0 (W…

3. 矩阵置零

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 根据行和列检测出0所在位置&#xff0c;并将行和列数组的对应位置改为true如果遍历到某一行列时&#xff0c;只要行和列数组里面有一个是true&#xff0c;就置为0 提示&#…

【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题

处理网络请求时&#xff0c;我们经常会遇到需要中途取消请求的情况&#xff0c;比如用户在两个tab之间反复横跳的场景&#xff0c;如果每个接口都从头请求到结束&#xff0c;那必然会造成很大的服务压力。 AbortController是一个Web API&#xff0c;它提供了一个信号对象&…

C语言跳表(Skip List)算法:数据世界的“时光穿梭机”

在数据结构算法中&#xff0c;有一种算法犹如“时空穿梭机”&#xff0c;能在瞬间跨越层层障碍&#xff0c;直击目标——它就是跳表算法。下面&#xff0c;就让我们一起揭开跳表算法的神秘面纱&#xff0c;通过实例探究其高效与魅力。 目录 一、跳表算法是什么&#xff1f; …

2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题题解)(C++/Java题解)

记录刷题的过程、感悟、题解。 希望能帮到&#xff0c;那些与我一同前行的&#xff0c;来自远方的朋友&#x1f609; 大纲&#xff1a; 1、日期统计-&#xff08;解析&#xff09;-暴力dfs&#xff08;&#x1f609;蓝桥专属 2、01串的熵-&#xff08;解析&#xff09;-不要chu…

批量将文本文件转换为 Word/PDF/Excel/图片等其它格式

工作中我们经常会接触到各种格式的文本文档&#xff0c;比如说 txt 记事本文件、json文件、HTML格式文件等等。通常也会需要将文本文件转换为其他的格式&#xff0c;比如说将文本文件转换为 word 格式、PDF格式或者图片格式等等。当我们想要对文本文件格式进行批量转换的时候&a…

Java常用工具算法-2--加密算法1--对称加密算法(推荐AES算法)

1、定义与核心原理 定义&#xff1a;加密和解密使用相同密钥的算法。工作流程&#xff1a; 秘钥协商&#xff1a;双方需提前通过安全信道共享密钥。加密过程&#xff1a;发送方用密钥对明文加密&#xff0c;生成密文。解密过程&#xff1a;接收方用相同密钥对密文解密&#xf…

WPS宏开发手册——Excel常用Api

目录 系列文章4、Excel常用Api4.1、判断是否是目标工作excel4.2、获取源工作表和目标工作表的引用4.3、获取单元格的值4.4、设置单元格的值4.5、合并单元格4.6、获取源范围4.7、获取源范围行数4.8、通过源来获取单元格的值4.9、设置单元格的背景颜色4.10、设置单元格的文字颜色…

安徽京准:GPS北斗卫星校时服务器助力大数据云计算

安徽京准&#xff1a;GPS北斗卫星校时服务器助力大数据云计算 安徽京准&#xff1a;GPS北斗卫星校时服务器助力大数据云计算 GPS北斗卫星校时服务器在大数据与云计算系统中发挥着关键作用&#xff0c;其通过提供高精度、高可靠的时间同步服务&#xff0c;解决了分布式系统的核…

音视频 ColorSpace色彩空间详解

前言 基于前篇介绍YUV格式,本文继续介绍另一个重要概念颜色空间,又叫色彩空间;主要用于在音视频开发中的色彩空间转换。 色彩空间Color Space 色彩空间由色彩模型和色域共同定义。当色彩模型与特定的描述相关联以后,就称为色彩空间。 色彩模型Color Model 色彩模型Col…