当前位置: 首页 > news >正文

Oracle(47)如何创建和使用集合?

在PL/SQL中,集合(Collection)是一种复合数据类型,用于存储一组相关的数据项。集合主要有三种类型:关联数组(Associative Arrays)、嵌套表(Nested Tables)和可变数组(VARRAYs)。以下是如何创建和使用每种类型集合的详细说明和示例代码。

1. 关联数组(Associative Arrays)

关联数组是键值对形式的集合,键可以是字符串或数字。它们非常适合用于需要快速查找和更新的情况。

创建和使用关联数组
DECLARE-- 定义一个关联数组类型TYPE employee_salary_type IS TABLE OF NUMBER INDEX BY VARCHAR2(50);-- 声明一个关联数组变量employee_salaries employee_salary_type;
BEGIN-- 添加数据employee_salaries('John') := 5000;employee_salaries('Jane') := 6000;employee_salaries('Alice') := 7000;-- 访问数据DBMS_OUTPUT.PUT_LINE('Salary of John: ' || employee_salaries('John'));DBMS_OUTPUT.PUT_LINE('Salary of Jane: ' || employee_salaries('Jane'));-- 更新数据employee_salaries('John') := 5500;DBMS_OUTPUT.PUT_LINE('Updated salary of John: ' || employee_salaries('John'));-- 删除数据employee_salaries.DELETE('Jane');IF employee_salaries.EXISTS('Jane') THENDBMS_OUTPUT.PUT_LINE('Salary of Jane: ' || employee_salaries('Jane'));ELSEDBMS_OUTPUT.PUT_LINE('Jane''s salary record does not exist.');END IF;
END;
/

2. 嵌套表(Nested Tables)

嵌套表是一种无界数组,可以存储任意数量的元素。它们适用于需要动态调整大小的集合。

创建和使用嵌套表
DECLARE-- 定义一个嵌套表类型TYPE employee_name_type IS TABLE OF VARCHAR2(50);-- 声明一个嵌套表变量employee_names employee_name_type;
BEGIN-- 初始化嵌套表employee_names := employee_name_type('John', 'Jane', 'Alice');-- 添加数据employee_names.EXTEND;employee_names(4) := 'Bob';-- 访问数据FOR i IN 1..employee_names.COUNT LOOPDBMS_OUTPUT.PUT_LINE('Employee ' || i || ': ' || employee_names(i));END LOOP;-- 更新数据employee_names(2) := 'Janet';DBMS_OUTPUT.PUT_LINE('Updated Employee 2: ' || employee_names(2));-- 删除数据employee_names.DELETE(3);FOR i IN 1..employee_names.COUNT LOOPDBMS_OUTPUT.PUT_LINE('Employee ' || i || ': ' || employee_names(i));END LOOP;
END;
/

3. 可变数组(VARRAYs)

可变数组是一种定长数组,存储元素的个数在创建时指定。它们适用于元素数量固定或变化范围较小的情况。

创建和使用可变数组
DECLARE-- 定义一个可变数组类型TYPE employee_id_varray IS VARRAY(5) OF NUMBER;-- 声明一个可变数组变量employee_ids employee_id_varray := employee_id_varray(1, 2, 3);
BEGIN-- 添加数据employee_ids.EXTEND;employee_ids(4) := 4;-- 访问数据FOR i IN 1..employee_ids.COUNT LOOPDBMS_OUTPUT.PUT_LINE('Employee ID ' || i || ': ' || employee_ids(i));END LOOP;-- 更新数据employee_ids(2) := 5;DBMS_OUTPUT.PUT_LINE('Updated Employee ID 2: ' || employee_ids(2));-- 删除数据employee_ids.DELETE(3);FOR i IN 1..employee_ids.COUNT LOOPDBMS_OUTPUT.PUT_LINE('Employee ID ' || i || ': ' || employee_ids(i));END LOOP;
END;
/

常用操作

无论是哪种类型的集合,它们都支持一些常见的操作:

  1. 初始化(Initialization):使用构造函数或赋值语句初始化集合。
  2. 添加元素(Adding Elements):使用EXTEND方法扩展集合的大小,然后赋值。
  3. 访问元素(Accessing Elements):通过索引或键访问集合中的元素。
  4. 更新元素(Updating Elements):直接通过索引或键更新集合中的元素。
  5. 删除元素(Deleting Elements):使用DELETE方法删除集合中的元素。
  6. 遍历元素(Iterating Elements):使用FOR循环遍历集合中的所有元素。

综合示例

以下示例展示了如何综合使用集合的各种操作。

DECLARE-- 定义一个记录类型TYPE employee_record IS RECORD (employee_id NUMBER,first_name VARCHAR2(50),last_name VARCHAR2(50),salary NUMBER);-- 定义一个嵌套表类型TYPE employee_table_type IS TABLE OF employee_record INDEX BY PLS_INTEGER;-- 声明一个嵌套表变量employee_table employee_table_type;v_employee employee_record;i PLS_INTEGER;
BEGIN-- 添加数据employee_table(1).employee_id := 1;employee_table(1).first_name := 'John';employee_table(1).last_name := 'Doe';employee_table(1).salary := 5000;employee_table(2).employee_id := 2;employee_table(2).first_name := 'Jane';employee_table(2).last_name := 'Smith';employee_table(2).salary := 6000;-- 访问数据FOR i IN 1..employee_table.COUNT LOOPv_employee := employee_table(i);DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee.employee_id || ', Name: ' || v_employee.first_name || ' ' || v_employee.last_name ||', Salary: ' || v_employee.salary);END LOOP;-- 更新数据employee_table(1).salary := 5500;DBMS_OUTPUT.PUT_LINE('Updated Salary of Employee 1: ' || employee_table(1).salary);-- 删除数据employee_table.DELETE(2);IF employee_table.EXISTS(2) THENDBMS_OUTPUT.PUT_LINE('Employee 2 still exists.');ELSEDBMS_OUTPUT.PUT_LINE('Employee 2 has been deleted.');END IF;-- 遍历剩余数据FOR i IN 1..employee_table.COUNT LOOPv_employee := employee_table(i);DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_employee.employee_id || ', Name: ' || v_employee.first_name || ' ' || v_employee.last_name ||', Salary: ' || v_employee.salary);END LOOP;
END;
/

总结

集合是PL/SQL中用于存储和操作一组相关数据项的复合数据类型。它们包括关联数组、嵌套表和可变数组三种类型,每种类型都有其独特的特点和适用场景。通过合理使用集合,可以显著提高PL/SQL程序的数据处理能力和效率。在使用集合时,需要掌握它们的初始化、添加、访问、更新、删除和遍历等基本操作。

http://www.lryc.cn/news/420339.html

相关文章:

  • SpringIOC和SpringAOC
  • static关键字详解
  • 使用 Java RestClient 与 Elasticsearch 进行索引管理的示例
  • 编程-设计模式 10:外观模式
  • 非范型ArrayList和泛型List<T>
  • 魔众文库系统v7.0.0版本推荐店铺功能,管理菜单逻辑优化
  • 03、流程控制语句
  • [Android] [解决]Bottom Navigation Views Activity工程带来的fragment底部遮盖的问题
  • Armv8/Armv9架构中的原子性
  • 读零信任网络:在不可信网络中构建安全系统15协议和过滤
  • C语言学习笔记 Day11(指针--中2)
  • Golang 并发编程
  • 【数据结构详解】——选择排序(动图详解)
  • 杂项命令(笔记)
  • 代码随想录算法训练营Day38||完全背包问题、leetcode 518. 零钱兑换 II 、 377. 组合总和 Ⅳ 、70. 爬楼梯 (进阶)
  • 超越链端:Web3的无边界技术革命
  • 127. Go反射基本原理
  • 提高PDF电子书的分辨率
  • Spring Cloud全解析:注册中心之zookeeper注册中心
  • 解决戴尔台式电脑休眠后无法唤醒问题
  • MySQL运维-分库分表
  • AGX orin硬件设计
  • AI大模型开发——2.深度学习基础(1)
  • go语言day22 gin-vue-admin全栈项目的依赖安装
  • PHP之docker学习笔记
  • 基于树莓派4B与STM32的UART串口通信实验(代码开源)
  • 【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
  • IIC协议
  • 如何在linux系统上部署nginx
  • 香港网站服务器抵御恶意攻击的一些措施