2011-03-30 37 views
5

我在許多地方過這個代碼運行:創建一個緩衝區與同名的數據庫表

DEFINE BUFFER Customer FOR Customer. 

我有兩個問題:

  1. 的目的是什麼這個的?爲什麼創建一個與表格名稱相同的緩衝區是有好處的?

  2. 當編寫代碼訪問此表/緩衝區時,Progress如何知道是直接訪問數據庫還是通過緩衝區訪問數據庫?

+0

@湯姆巴斯康姆可能知道,他的進步'喬恩Skeet,對不起,如果我說他的名字徒勞 – Kyle 2016-02-02 17:26:16

回答

8

1:這通常是爲了管理緩衝區的範圍。

例如,如果您有一個包含許多內部過程的過程,它們都訪問同一個表,那麼該表的默認緩衝區將被限制爲頂層過程塊。例如 -

procedure p1: 
    find first customer no-lock. 
end. 

procedure p2: 
    find last customer no-lock. 
end. 

將最終將客戶緩衝區範圍設定爲包含過程。如果你試圖保持你的內部程序鬆散耦合和自包含,那麼你可能不需要這種行爲。所以你應該在每個內部程序中定義一個緩衝區。

Obv還有其他的原因來定義緩衝區,但是當你看到代碼定義了一個與表名相同的緩衝區時,它通常是關於作用域的。

2:它總是通過緩衝區訪問數據庫。每個表中有相同的名稱表默認緩衝區,所以

find first <buffername>. 

將尋找一個緩衝名爲BufferName中這可能是一個明確定義的緩衝或隱含的默認緩衝。如果存在,優先級將轉到明確定義的緩衝區。

+1

這種技術有一個最大的好處是它可以防止意外的副作用,特別是記錄鎖,從影響主要程序或其他內部程序。 – 2011-03-31 10:15:05

+1

感謝Gordon的評論 - 這是一個很好的解釋。我理解這背後的邏輯,但我不同意命名約定。對我來說,一個緩衝區仍然應該以「b-」或其他地方作爲前綴來定義你正在引用緩衝區。使用數據庫表格名稱作爲緩衝區名稱似乎只會使代碼比需要的更容易混淆。 – pmartin 2011-04-01 16:09:43

相關問題