PL/SQL 示例应用程序 — FORALL PL/SQL 示例应用程序 — FORALL


日期:2005 年 1 月 12 日


目录

简介
应用程序概述
所需软件
术语
配置应用程序
运行应用程序
示例应用程序文件
其他参考资料

简介

前提条件

要了解该示例应用程序,用户应掌握以下方面的知识:

技术概述

当 PL/SQL 应用程序需要处理索引表时,在不确定所有索引是否均位于该表上时,有时不能使用标准 FOR 循环来迭代值。Oracle 数据库 10g 通过集合中的非连续索引引入了对 FORALL 语法的支持。INDICES OF 子句允许将 FORALL 语法用于稀疏集合,而 VALUE OF 子句用于指向其他集合的索引集合。


INDICES OF 关键字可用在以编程方式验证记录集合并将无效记录从集合中删除的场合。这会产生一个有效元素的稀疏集合,随后可以将该集合批量插入表中。通过使用 INDICES OF 关键字,避免了丢失记录例外情况的发生。当要使用在另一数组中定义的行数时,可以使用 INDICES OF 子句。

当在 DML 操作中使用在另一个数组中定义的值时,可以使用 VALUES OF 子句。它将只处理行号与驱动数组中的行内容相匹配的行。请考虑这样一个情形,即必须将记录集合复制到一个或多个集合变量,这取决于某些决定可以或不可以复制一些记录的条件,然后插入表中。使用“VALUES OF”语法,结合其元素均为原始集合内选定记录的指针的指针数组,可以高效地完成此任务。

应用程序概述

该示例应用程序通过订单处理情景演示了 FORALL 语句中新子句的用法。当客户创建了购物车并结算钱款时,订单数据被存储到 ALL_ORDERS 表中。假设该应用程序需要分离出新建的记录,并将其发送去进行订单处理。此外,还需要将已处理的订单和时间非常久远的订单在单独的表中存档。在该应用程序中,所有订单都被存储在 ALL_ORDERS 表中。当运行 filter_records.sql 时,它会将所有订抓取到一个集合中,并进行进一步处理以分离新建订单和已履行的订单。此处使用的条件基于订单日期和订单状态。在满足该条件后,则将相应元素从集合中删除。这会产生一个稀疏集合,该集合用于将订单插入 NEW_ORDERS 表中。该部分代码演示了“INDICES OF”子句的使用。此外,还会创建一个指向“要存档”记录的索引值的集合,然后,使用该集合将数据插入 ORDERS_ARCHIVE 表中。这演示了在使用 FORALL 语句时“VALUES OF”子句的使用。

所需软件

以下是配置和运行此示例应用程序所需的软件。

术语

术语 定义

该示例所解压缩在的目录


配置应用程序

  • 解压缩下载的 FORALLSample.zip。将文件内容解压缩到 <SAMPLE_HOME> 目录中。
    这将创建包含所有文件和文件夹的 FORALLSample 文件夹

  • 打开命令提示符,通过执行以下命令转至 <SAMPLE_HOME>/FORALLSample/src 文件夹:

    cd <SAMPLE_HOME>/FORALLSample/src


  • 打开 SQL 提示符。以 SCOTT/TIGER 进行连接,然后从 <SAMPLE_HOME>/FORALLSample/src 文件夹中运行 config.sql 脚本。这将创建一些必要的表,并将订单数据插入 ALL_ORDERS 表中。
    例如,

    SQL>@config.sql

运行应用程序

按照以下步骤运行此应用程序。

  • 从 SQL 命令提示符下运行 filter_orders.sql 文件。例如,

    SQL>@filter_orders.sql

    运行该文件将把经筛选的订单数据插入 NEW_ORDERS 和 ORDERS_ARCHIVE 表中。您可以通过在两个表上运行 SELECT 查询来查看该数据。

    请参见 filter_orders.sql 文件,以获取有关如何在 FORALL 中使用“INDICES OF”和“VALUES OF”子句的详细信息。

示例应用程序文件

本部分提供了示例应用程序文件及其说明的一个表格化列表。

目录 文件 说明
readme.html

本文件

config.sql 创建必要数据库对象的 SQL 文件
filter_orders.sql
用于筛选出新订单和旧订单。该文件在 FORALL 语句中使用新子句。


其他参考资料


请在此处输入您对该示例应用程序的意见。

寄送此页面
Printer View 打印机视图