百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Oracle数据库扩展语言PL/SQL之集合

mhr18 2024-09-23 09:58 23 浏览 0 评论

【本文详细介绍了Oracle数据库扩展语言PL/SQL中集合的基本概念和使用方法,欢迎读者朋友们阅读、转发和收藏!】

1 基本概念

1.1 集合的概念

集合就是相同类型的元素的有序合集。它是一个通用的概念,其中包含了列表、数组和其他相似的数据类型。每一个元素都有唯一的下标来标识当前元素在集合中的位置。 PL/SQL 提供了以下几种集合类型:

1. 索引表,也称为关联数组,可以让我们使用数字或字符串作下标来查找元素。 ( 这有点和其他语言中的哈希表相类似。 )

2. 嵌套表可以容纳任意个数的元素,使用有序数字作下标。我们可以定义等价的 SQL 类型,把嵌套表存到数据库中去,并通过 SQL 语句进行操作。

3. 变长数组能保存固定数量的元素 ( 但可以在运行时改变它的大小 ) ,使用有序数字作为下标。同嵌套表一样,也可以保存到数据库中去,但灵活性不如嵌套表好。

虽然集合是一维的,但我们可以把一个集合作为另外一个集合的元素来建立多维集合。

要在应用程序中使用集合,我们要先定义一个或多个 PL/SQL 类型,然后声明这些类型的变量。我们可以在过程、函数或包中定义集合类型。还可以把集合作为参数在客户端和存储子程序之间传递数据。

要查找复杂类型的数据,我们可以在集合中存放 PL/SQL 记录或 SQL 对象类型。嵌套表和变长数组也可以作为对象类型的属性。

1.2 定义集合类型

要使用集合,我们首先要创建集合类型,然后声明该类型的变量。我们可以在任何 PL/SQL 块、子程序或包的声明部分使用 TABLE 和 VARRAY 类型。

集合的作用域和初始化规则同其他类型和变量一样。在一个块或子程序中,当程序进入块或子程序时集合被初始化,退出时销毁。在包中,集合在我们第一次引用包的时候初始化,直至会话终止时才销毁。

嵌套表

对于嵌套表,可以使用下面的语法来进行定义:

TYPE type_name IS TABLE OF element_type [NOT NULL];

其中 type_name 是在集合声明使用的类型标识符,而 element_type 可以是除了 REF CURSOR 类型之外的任何 PL/SQL 类型。对于使用 SQL 声明的全局嵌套表来说,它的元素类型受到一些额外的限制。以下几种类型是不可以使用的:

  • 1.BINARY_INTEGER, PLS_INTEGER
  • 2.BOOLEAN
  • 3.LONG, LONG RAW
  • 4.NATURAL, NATURALN
  • 5.POSITIVE, POSITIVEN
  • 6.REF CURSOR
  • 7.SIGNTYPE
  • 8.STRING

变长数组

对于变长数组类型,可以使用下面的语法进行定义:

TYPE type_name IS {VARRAY | VARYING ARRAY} (size_limit) OF element_type [NOT NULL];

type_name 和 element_type 的含义与嵌套表相同。 size_limit 是正整数,代表数组中最多允许存放元素的个数。在定义 VARRAY 时,我们必须指定它的长度最大值。

相关推荐

毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远

办公系统类:办公软件Word、Excel、PowerPoint三大必备技能+腾讯/金山在线文档解压缩操作:7-zip/winrar文件文本处理:Notepad++(文本编辑器正则表达式超级好...

盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?

一、Stack类:“继承Vector”的历史bug,为何成了性能拖油瓶?你是不是在学Java集合时,老师说过“栈结构用Stack类”?是不是在老代码里见过"newStack<>(...

Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent

一、Gemini2.5Pro(I/Oedition)发布1、为何叫I/Oedition?谷歌史上最强编程模型Gemini2.5Pro(I/Oedition)发布,具体型号是Gemin...

如何让无聊变得有趣(附本人大量美图)

文/图:金冬成在这条长300公里的公路上,我已经来回往返了无数次。3小时车程,一个人,想想都是多么无聊的一件事。其实,人生道路上,类似这种无聊的事情有很多很多。无聊的事情、枯燥的工作,往往让我们容易失...

Oracle 推出 Java 24,增强 AI 支持和后量子加密

导读:Oracle宣布正式发布Java24,该语言增加了几个新功能,例如StreamGatherersAPI和Class-FileAPI的可用性,以及专门为AI推理和量子安全设计...

公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!

各位老板、IT小哥、财务小姐姐,有没有遇到过公司ERP系统突然卡顿得像“老爷车”,点个按钮半天没反应,急得直跺脚?这时候,可能有人会跳出来说:“我知道,重建一下数据库索引就好了!”听起来像个“神操作”...

基于Java实现,支持在线发布API接口读取数据库,有哪些工具?

基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...

作为后端开发,你知道MyBatis有哪些隐藏的 “宝藏” 扩展点吗?

在互联网大厂后端开发领域,MyBatis作为一款主流的持久层框架,凭借其灵活的配置与强大的数据处理能力,广泛应用于各类项目之中。然而,随着业务场景日趋复杂、系统规模不断扩张,开发过程中常面临SQL...

SpringBoot集成Mybatis-Plus分页插件

一、官方介绍支持的数据库mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss,clickhouse,Sybase,Oc...

深度分页为何让MySQL/Oracle集体“罢工”?

深夜,服务器突然报警!页面加载时间飙升10倍,数据库CPU直接爆表——罪魁祸首竟是一个看似无害的“分页查询”功能。无数开发者直到系统崩溃才惊觉:深度分页,正在无声吞噬你的数据库性能!一、现象直击:...

HPE 3PAR新增对3D NAND、Oracle加速支持

HewlettPackardEnterprise(HPE)在近日为其3PARStoreServ存储阵列增加了对3DNAND闪盘的支持,这将在某种程度上缓解客户购买其他存储厂商产品的情况。3D...

Innodb中的事务隔离级别和锁的关系

我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于...

巧用 VHD 实现多 Windows 系统共存:从原理到实战

在数字化办公与多元需求交织的时代,许多用户需要在同一台计算机上使用多个Windows系统,以满足不同工作场景、软件兼容性或开发测试的需求。传统的多系统安装方法往往需要对硬盘进行复杂分区,或是利用虚...

为什么越来越多Linux桌面系统选择Btrfs文件系统?

在过去很长一段时间里,Linux桌面用户安装系统时,大多数默认选项都是老牌文件系统EXT4。它稳定、简单、可靠,确实功不可没。但最近你有没有发现?越来越多的Linux桌面发行版开始默认使用一个...

SQLite:小众?其实它比你想象的更普及,连这个领域都有人用!

2000年,一艘美国军舰上,数据库服务器频繁宕机,弹出“无法连接数据库”的致命报错。程序员RichardHipp被“背锅”后灵光一现:“为什么不能直接从硬盘读数据?”——这句疑问,拉开了SQLite...

取消回复欢迎 发表评论: