热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle11gRelease1(11.1)PL/SQL_了解Collections和Records

很多编程技术使用集合类型,例如arrays、bags、lists、nestedtables、sets和trees。为了在数据库应用这些技术,PLSQLdatat

很多编程技术使用集合类型,例如 arrays、bags、lists、nested tables、sets 和 trees。为了在数据库应用这些技术,PL/SQL datat

本文内容

  • 概述
  • 了解 PL/SQL Collection 类型
  • 选择 PL/SQL Collection 类型
  • 参考
  • 概述

    很多编程技术使用集合类型,例如 arrays、bags、lists、nested tables、sets 和 trees。为了在数据库应用这些技术,,PL/SQL datatypes 提供 TABLE 和 VARRAY,可以声明 index-by tables、nested tables 和 variable-size arrays。

    Collections

    一个 collection 是具有相同类型元素的有序组。每个元素有唯一标值(unique subscript),以确定它在集合中的位置。

    collection 工作机制类似于大多数第三代编程语言的“数组”。另外,collection 可以作为参数传递。因此,可以用在数据库表中,或客户端应用程序和已存储的子程序(用 CREATE OR REPLACE PRODUCE 创建的子程序,与匿名子程序相对)之间,传入/出的数据列。

    Records

    可以使用 %ROWTYPE 属性,来声明一个表示表或游标行的 Record。也可以自定义 Record,声明自己的字段。

    Record 包含名字唯一的字段,它们可以是不同数据类型。假设,你有关于员工的各种数据,如姓名、工资和入职时间等。这些项类型不同,但逻辑相关。Record 可以让你把数据当作一个逻辑单元。

    这些组合变量都有内部组件,可以让你把他们当作单独的变量。你可以把组合变量作为参数传递给子程序。

    若创建一个 collection 或 record 变量,先定义一个 collection 或 record 类型,然后声明一个这个类型的变量。本文,除非特别说明,否则 collection 或 record 同时意味着类型和类型的变量。

    在一个 collection 中,内部组件总是相同的数据类型,称为“元素(elements)”。你可以通过唯一标值(unique subscript)访问每个元素。list 和 array 是 collection 的典型例子。

    在一个 record 中,内部组件可以是不同的数据类型,成为“字段(fields)”。你可以通过它们的名字访问每个字段。一个 record 变量可以持有表的一行,或是一行的某些列。每个 record 的字段,对用表的一列。

    PL/SQL 有三种 collection 类型,它们的特点如下表所示:

    类型

    元素个数

    唯一标识类型

    稠密或稀疏

    创建位置

    是否可以是对象类型的属性

    Associative array (or index-by table)

    Unbounded

    字符串

    或整数

    都可以

    仅在 PL/SQL 块

    Nested table

    Unbounded

    整数

    开始稠密的,之后,变成稀疏的

    或在 PL/SQL 块,或在模式级别

    Variable-size array (varray)

    Bounded

    整数

    总是稀疏的

    或在 PL/SQL 块,或在模式级别

    备注:

  • Unbounded 意思是,理论上,collection 中的元素数量没有限制。可实际上,是有限制的,只不过数量很大而已。
  • Dense 意思是,collection 元素之间没有间隙。定义在第一个和最后一个之间的每个元素,都有值,可以为 NULL。
  • 在一个 PL/SQL 块创建的 collection 只能在该块使用。在模式级别创建的一个 nested table 或 varray 类型,它们保存在数据库,并可用 SQL 语句操作。
  • 一个 collection 只能是一维的,但你可以创建一个多维的 collection,collection 的每个元素还是一个 collection。
  • lnpls016

    图1 Associative array 和 Nested table

    lnpls017

    图2 Variable-size array


    推荐阅读
    • SQLite数据库CRUD操作实例分析与应用
      本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
    • 在实际开发中,连接池是最常使用的数据库管理技术之一。连接池通过创建和管理一组预初始化的数据库连接,使得这些连接可以被多个线程复用,从而显著提高应用程序的性能和资源利用率。本文将详细介绍如何从零开始构建一个自定义的 MySQL 连接池,并将其与 Spring Data 进行集成,以实现高效、可靠的数据库操作。 ... [详细]
    • MySQL索引详解及其优化策略
      本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
    • 本文详细介绍了在 SQL Server 2005 中优化和实现分页存储过程的方法。通过创建一个名为 `[dbo].[GetUsers]` 的存储过程,该过程接受两个参数:`@RowIndex`(当前指定的页数)和 `@RecordCount`(每页显示的记录数)。文章不仅提供了具体的代码示例,还深入探讨了性能优化技巧,包括索引使用和查询优化策略,以提高分页查询的效率和响应速度。 ... [详细]
    • PHP 数组逆序排列方法及常用排序函数详解 ... [详细]
    • Node.js 配置文件管理方法详解与最佳实践
      本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
    • 如何高效启动大数据应用之旅?
      在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
    • 【漫画解析】数据已删,存储空间为何未减?揭秘背后真相
      在数据迁移过程中,即使删除了原有数据,存储空间却未必会相应减少。本文通过漫画形式解析了这一现象背后的真相。具体来说,使用 `mysqldump` 命令进行数据导出时,该工具作为 MySQL 的逻辑备份工具,通过连接数据库并查询所需数据,将其转换为 SQL 语句。然而,这种操作并不会立即释放存储空间,因为数据库系统可能保留了已删除数据的碎片信息。文章进一步探讨了如何优化存储管理,以确保数据删除后能够有效回收存储空间。 ... [详细]
    • 本文介绍了MySQL中一些基本但重要的数学函数,包括角度与弧度之间的转换函数RADIANS(X)和DEGREES(X),以及正弦函数。RADIANS(X)用于将角度值转换为弧度值,而DEGREES(X)则将弧度值转换为角度值。这些函数在处理涉及角度和弧度的计算时非常有用,能够简化复杂的数学运算。此外,正弦函数在三角学和工程计算中也具有广泛的应用,能够帮助用户更高效地进行数据处理和分析。 ... [详细]
    • 本文详细解析了MySQL中的多表联合查询技术,涵盖了内连接、外连接和交叉连接三种主要类型。通过具体示例,深入探讨了每种连接方式的使用场景和实现方法,帮助读者全面掌握SQL查询技巧,提升数据处理能力。 ... [详细]
    • 在数据库事务处理中,InnoDB 存储引擎提供了多种隔离级别,其中 READ COMMITTED 和 REPEATABLE READ 是两个常用的选项。本文详细对比了这两种隔离级别的特点和差异,不仅从理论角度分析了它们对“脏读”和“幻读”的处理方式,还结合实际应用场景探讨了它们在并发控制和性能表现上的不同。特别关注了行锁机制在不同隔离级别下的行为,为开发者选择合适的隔离级别提供了参考。 ... [详细]
    • 在使用PFC进行数据处理时,遇到了数据列消失的问题。具体表现为,在数据窗口dw_1中,原本点击排序按钮cb_1后,会弹出一个排序窗口并显示所有字段。然而,目前点击排序按钮时,数据列却无法正常显示。为了解决这一问题,需要检查数据源的配置和按钮事件的触发逻辑,确保数据列能够正确加载和显示。 ... [详细]
    • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
      在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
    • 开发日志:在插入数据到一张表的同时更新另一张表的技术细节与最佳实践 ... [详细]
    • 在近期的项目开发过程中,ORM层采用了MyBatis,并且需要连接多个数据库,这带来了多数据源配置的挑战。为了解决这一问题,我们可以通过巧妙运用注解来实现优雅的数据源切换,确保系统的灵活性和可维护性。这种方法不仅简化了配置,还提高了代码的可读性和扩展性。 ... [详细]
    author-avatar
    百变精灵6810
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有