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...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远
- 盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?
- Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent
- 如何让无聊变得有趣(附本人大量美图)
- Oracle 推出 Java 24,增强 AI 支持和后量子加密
- 公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!
- 基于Java实现,支持在线发布API接口读取数据库,有哪些工具?
- 作为后端开发,你知道MyBatis有哪些隐藏的 “宝藏” 扩展点吗?
- SpringBoot集成Mybatis-Plus分页插件
- 深度分页为何让MySQL/Oracle集体“罢工”?
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)