目录
Associative Arrays (Index-By Tables)
Nested Tables
Varrays (Variable-size Arrays)
首页 数据库 Oracle 什么是PL/SQL集合(关联阵列,嵌套表,Varrays),它们如何使用?

什么是PL/SQL集合(关联阵列,嵌套表,Varrays),它们如何使用?

Jul 17, 2025 am 04:04 AM
集合 pl/sql

PL/SQL集合用于在单个变量中存储多个值,主要有三种类型:1. 关联数组(Index-By表)适用于PL/SQL块内的临时存储,如缓存错误消息或配置设置,无需初始化即可直接赋值且索引可从任意数字开始;2. 嵌套表支持存储在数据库表中并用于SQL语句,适合传递数据集或存储结构化列表,可扩展且支持DML操作;3. 可变数组(Varrays)用于有序、固定大小的列表,如星期或月份,需定义最大容量,存储时内联性能较好但无法删除单个元素。选择哪种类型取决于具体应用场景是否涉及存储、传递或临时使用数据。

PL/SQL collections are like containers for holding multiple values in a single variable. They’re super useful when you need to work with groups of related data, especially in PL/SQL blocks or stored procedures. There are three main types: associative arrays (index-by tables), nested tables, and varrays.

Each has its own strengths and use cases — let’s break them down one by one.


Associative Arrays (Index-By Tables)

These are the simplest type of collection in PL/SQL. Think of them as key-value pairs, where each value is associated with a unique index — usually an integer or string.

Use case:
They're great for temporary storage within a PL/SQL block. For example, caching a list of error messages or configuration settings that you want to access quickly by key.

How to declare and use:

DECLARE
  TYPE t_employee_names IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
  employee_names t_employee_names;
BEGIN
  employee_names(1) := 'Alice';
  employee_names(2) := 'Bob';

  DBMS_OUTPUT.PUT_LINE('Employee 1: ' || employee_names(1));
END;

Some things to know:

  • They can’t be stored in database tables.
  • You don’t need to initialize them before using — just assign values directly.
  • Indexes can start from any number and don’t have to be sequential.

Nested Tables

These are similar to associative arrays but more flexible. Unlike associative arrays, they can be stored in database tables and used in SQL statements.

Use case:
When you need to pass sets of data between PL/SQL and SQL, or store structured lists in a column of a table.

How to declare and use:

First create a type at the schema level:

CREATE OR REPLACE TYPE t_number_list AS TABLE OF NUMBER;

Then use it in a table or PL/SQL block:

DECLARE
  numbers t_number_list := t_number_list(1, 2, 3);
BEGIN
  numbers.EXTEND;
  numbers(4) := 4;

  FOR i IN 1..numbers.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(numbers(i));
  END LOOP;
END;

Important notes:

  • Nested tables are unbounded — you can keep adding elements.
  • When stored in a database table, they’re stored out-of-line (like a separate table).
  • They support DML operations through the TABLE() function in SQL.

Varrays (Variable-size Arrays)

Varrays are like fixed-size arrays — you define a maximum size when you declare the type. They maintain order and can be accessed by index.

Use case:
When you need a limited set of ordered items, such as days of the week, months, or a fixed list of options.

How to declare and use:

CREATE OR REPLACE TYPE t_week_days AS VARRAY(7) OF VARCHAR2(10);

In a PL/SQL block:

DECLARE
  weekdays t_week_days := t_week_days('Mon', 'Tue', 'Wed', 'Thu', 'Fri');
BEGIN
  weekdays.EXTEND;
  weekdays(6) := 'Sat';
  weekdays(7) := 'Sun';

  FOR i IN 1..weekdays.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(weekdays(i));
  END LOOP;
END;

Key points:

  • You must specify the max size upfront.
  • Stored inline in tables — better performance if you have small, predictable datasets.
  • Cannot delete individual elements; only truncate or extend.

So depending on whether you're working inside a PL/SQL block, storing data in a table, or dealing with fixed-length lists, you'll choose one of these collection types.

基本上就这些。

以上是什么是PL/SQL集合(关联阵列,嵌套表,Varrays),它们如何使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1604
29
PHP教程
1510
276
为何在Go语言中难以实现类似集合的功能? 为何在Go语言中难以实现类似集合的功能? Mar 24, 2024 am 11:57 AM

在Go语言中难以实现类似集合的功能,是一个困扰许多开发者的问题。相比其他编程语言如Python或Java,Go语言并没有内置的集合类型,如set、map等,这给开发者在实现集合功能时带来了一些挑战。首先,让我们来看一下为何在Go语言中难以直接实现类似集合的功能。在Go语言中,最常用的数据结构是slice(切片)和map(映射),它们可以完成类似集合的功能,但

如何优化Java集合排序性能 如何优化Java集合排序性能 Jun 30, 2023 am 10:43 AM

Java是一种功能强大的编程语言,广泛应用于各类软件开发中。在Java开发中,经常会涉及到对集合进行排序的场景。然而,如果不对集合排序进行性能优化,可能会导致程序的执行效率下降。本文将探讨如何优化Java集合排序的性能。一、选择合适的集合类在Java中,有多种集合类可以用来进行排序,如ArrayList、LinkedList、TreeSet等。不同的集合类在

C#中常见的并发集合和线程安全问题 C#中常见的并发集合和线程安全问题 Oct 09, 2023 pm 10:49 PM

C#中常见的并发集合和线程安全问题在C#编程中,处理并发操作是非常常见的需求。当多个线程同时访问和修改同一数据时,就会出现线程安全问题。为了解决这个问题,C#提供了一些并发集合和线程安全的机制。本文将介绍C#中常见的并发集合以及如何处理线程安全问题,并给出具体的代码示例。并发集合1.1ConcurrentDictionaryConcurrentDictio

Laravel 集合中的 Where 方法实用指南 Laravel 集合中的 Where 方法实用指南 Mar 10, 2024 pm 04:36 PM

Laravel集合中的Where方法实用指南在Laravel框架的开发过程中,集合(Collection)是一个非常有用的数据结构,它提供了丰富的方法来操作数据。其中,Where方法是一个常用的筛选方法,能够根据指定条件来过滤集合中的元素。本文将介绍Laravel集合中Where方法的使用,通过具体的代码示例来演示其用法。1.基本用法Where方法的

Java Iterator 与 Iterable:迈入编写优雅代码的行列 Java Iterator 与 Iterable:迈入编写优雅代码的行列 Feb 19, 2024 pm 02:54 PM

Iterator接口Iterator接口是一个用于遍历集合的接口。它提供了几个方法,包括hasNext()、next()和remove()。hasNext()方法返回一个布尔值,指示集合中是否还有下一个元素。next()方法返回集合中的下一个元素,并将其从集合中删除。remove()方法从集合中删除当前元素。以下代码示例演示了如何使用Iterator接口来遍历集合:Listnames=Arrays.asList("John","Mary","Bob");Iterator

使用HashSet类的addAll()方法将一个集合中的所有元素添加到另一个集合中 使用HashSet类的addAll()方法将一个集合中的所有元素添加到另一个集合中 Jul 24, 2023 am 08:58 AM

使用HashSet类的addAll()方法将一个集合中的所有元素添加到另一个集合中HashSet是Java集合框架中的一个实现类,它继承自AbstractSet,并实现了Set接口。HashSet是一个基于哈希表的无序集合,其中不允许包含重复的元素。它提供了许多常用的方法来操作集合中的元素,其中之一就是addAll()方法。addAll()方法的作用是将指定

Oracle PL/SQL Deep Dive:掌握过程,功能和软件包 Oracle PL/SQL Deep Dive:掌握过程,功能和软件包 Apr 03, 2025 am 12:03 AM

OraclePL/SQL中的过程、函数和包分别用于执行操作、返回值和组织代码。1.过程用于执行操作,如输出问候语。2.函数用于计算并返回值,如计算两个数之和。3.包用于组织相关元素,提高代码的模块化和可维护性,如管理库存的包。

基于凸集上投影(POCS)的聚类算法 基于凸集上投影(POCS)的聚类算法 Apr 30, 2023 pm 12:22 PM

POCS:ProjectionsontoConvexSets。在数学中,凸集是指其中任意两点间的线段均在该集合内的集合。而投影则是将某个点映射到另一个空间中的某个子空间上的操作。给定一个凸集合和一个点,可以通过找到该点在该凸集合上的投影来进行操作。该投影是离该点最近的凸集内的点,可以通过最小化该点和凸集内任何其他点之间的距离来计算。既然是投影,那么我们就可以将特征映射到另一个空间中的凸集合上,这样就可以进行聚类或降维等操作。本文综述了一种基于凸集投影法的聚类算法,即基于POCS的聚类算法。原始论

See all articles