程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle10g批量綁定FORALL字句的增強功能

Oracle10g批量綁定FORALL字句的增強功能

編輯:Oracle數據庫基礎
Oracle批量綁定FORALL字句的增強功能
技術概述
當 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”子句的使用。
所需的DML語句:(插入數據的inser語句在程序代碼之後)
CREATE TABLE all_orders (
  order_id NUMBER(12) PRIMARY KEY,
 order_date DATE,
 order_mode VARCHAR2(8),
 customer_id NUMBER(6),
 order_status NUMBER(2),
 order_total NUMBER(8,2),
 sales_rep_id NUMBER(6),
 promotion_id NUMBER(6)
 );
 CREATE TABLE new_orders (
 order_id NUMBER(12) PRIMARY KEY,
 order_date DATE,
 order_mode VARCHAR2(8),
 customer_id NUMBER(6),
 order_status NUMBER(2),
 order_total NUMBER(8,2),
 sales_rep_id NUMBER(6),
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved