Oracle 10g中用FIRALL處理非連續數組

來源:互聯網
上載者:User

在PL/SQL迴圈中執行資料操作語言(DML)是一件費時的工作,因為每次迴圈都要由PL/SQL引擎轉向SQL引擎。應用FORALL是一個更好的方法,它一次性向SQL語句提交一組臨時值。
在Oracle 10g前,FORALL語句的文法只能處理連續性的數組元素: FORALL index_name IN lower_bound ..upper_bound sql_statement;

這意味著:在以前,使用FORALL的巢狀表格不能刪除待處理數組中間的元素,而且數組項必須進行連續處理。Oracle 10g解決了這兩方面的問題,並增加了INDICES OF和VALUES OF子句。

INDICES OF子句替代lower_bound ..upper_bound,說明所有要處理的有效索引值,即使這些值之間存在間隔。就像是這樣:

FORALL index_name IN INDICES OF collection_name

BETWEEN lower_bound AND upper_bound

sql_statement;

您仍然可以應用BETWEEN文法限制要處理的範圍,這是一個可選的內容。

VALUES OF子句協助您以不同順序處理主要的集合。您再建立另一個集合,其中只包含您要處理的索引號碼,這些號碼以您希望處理的順序排列。然後該語句變為:

FORALL index_name IN VALUES OF index_collection

sql_statement;

列表A中是一個應用HR樣本模式的例子。我將部門名稱載入到記憶體中的一個巢狀表格內,然後在裡面搜尋與IT有關的部門。每搜尋到一個,我儲存它的表輸入項索引。VALUES OF子句結合這組索引對錶中的每個部門進行INSERT語句處理。(這隻是一個樣本;用一個單獨的SQL語句也可以進行同樣的處理。)列表B中是輸出結果。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.