2016-09-05 54 views
2

我知道可以爲SELECT語句創建遊標(隱式或顯式)。遊標是否用於INSERT,UPDATE和DELETE語句?

但是遊標(也就是隱式)是否也被創建用於INSERT,UPDATE和DELETE操作。如果他們做了什麼是有目的的。

要明確一個問題:可能會導致一百萬條記錄的SELECT語句,並創建一個不敏感(實際數據複製)光標可以幫助結果返回給客戶機作爲客戶端滾動向前或向後和可以避免在單個網絡請求中發送所有數據。 還有其他任何值得一提的好處都值得一提。
但是寫入操作(INSERT,UPDATE和DELETE)是一個需要的遊標,即使併發被考慮,它是不是資源開銷。如果操作失敗,它只會提前失敗。或者它是需要事務隔離的。因此,通過創建遊標來保證原子性和一致性。 (併發可以通過像2PL或MVCC等,其他機構聯合進行處理,但我更注重有關遊標的交易作用的時刻)

所以它看起來像交易還需要考慮, 是否每個事務都會導致創建遊標(隱式)。或者,如果存在其他機制來處理事務(併發和不帶併發),則在處理事務時,遊標根本沒有發言權或只有有限的作用。

+0

你說的是由甲骨文在後臺創建本質上是相同的東西作爲分析後的語句在PL/SQL或「遊標」遊標? –

+0

@a_horse_with_no_name,本質上是試圖弄清楚遊標是什麼以及它們如何提供幫助。將不會做太多的PL/SQL,但知道不會傷害,除非他們完全不同於SQL如何使用他們 – samshers

回答

4

幾乎每個語句都要創建/打開一個遊標(甚至是DDL語句)。 遊標是指向專用SQL區域的指針,用於存儲有關SELECT或數據操縱語言(DML)語句(INSERT,UPDATE,DELETE或MERGE)處理的信息。

如果不創建顯式遊標,則使用隱式遊標。隱式遊標的最有用和最常用的屬性是%ROWCOUNT屬性,它返回受影響的行數。

查看這些文檔以獲取更多信息。

Working with Cursors

SQL (Implicit) Cursor Attribute

+0

感謝您的Oracle參考。作爲Oracle用戶,這些參考對我來說非常重要。 – samshers

相關問題