2011-02-02 66 views
3

我只是想聽到有關ROWID類型用法的任何意見作爲任何函數或過程的輸入參數。Oracle ROWID作爲函數/過程參數

我已經正常使用和看到主鍵用作輸入參數,但是有一些使用ROWID作爲輸入參數的缺點嗎?我認爲這很簡單,如果在WHERE子句中使用,選擇會很快。

例如:

FUNCTION get_row(p_rowid IN ROWID) RETURN TABLE%ROWTYPE IS... 

回答

14

concept guide

物理的rowid提供給定表的行以最快的速度訪問。它們包含一行(到特定塊)的物理地址,並允許您在單個塊訪問中檢索該行。 Oracle保證只要該行存在,其rowid不會更改。

一個ROWID的主要缺點是,雖然它通常是穩定的,它可以在某些情況下改變:

  • 表重建(ALTER TABLE MOVE ...)
  • 導出/導入明顯
  • 分區與行移動臺啓用

主鍵標識一行升ogically,即使在刪除+插入後,您仍然可以找到正確的行。一個ROWID標識物理上的,並不像主鍵一樣持久。

您可以安全地在單個SQL語句中使用ROWID,因爲Oracle會保證結果是一致的,例如刪除表中的重複項。爲了安全起見,當你對行進行鎖定時(SELECT ... FOR UPDATE),我建議你只使用語句上的ROWID

從性能的角度來看,主鍵訪問有點貴,但只有在進行大量單行訪問時纔會注意到這一點。如果性能至關重要,那麼在使用set處理的情況下,通常可以獲得比使用rowid的單行處理更大的好處。特別是,如果DB和應用程序之間有很多往返,與往返成本相比,行訪問的成本可能可以忽略不計。

+0

這就是我想知道的,即某些原因不使用它:)謝謝! – 2011-02-02 10:39:24