5

私は多くの場所でこのコードに出くわしました:

DEFINE BUFFER Customer FOR Customer. 

2 つの質問があります。

  1. これの目的は何ですか?テーブルと同じ名前のバッファを作成すると便利なのはなぜですか?

  2. このテーブル/バッファにアクセスするコードを書くとき、Progress は DB に直接アクセスするか、バッファを介してアクセスするかをどのように判断しますか?

4

1 に答える 1

8

1: 通常、バッファのスコープを管理するために行われます。

たとえば、すべてが同じテーブルにアクセスする多数の内部プロシージャを含むプロシージャがある場合、そのテーブルのデフォルト バッファは最上位のプロシージャ ブロックにスコープが設定されます。例えば ​​-

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

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

含まれているプロシージャに顧客バッファのスコープを設定することになります。内部手順を疎結合して自己完結型にしようとしている場合は、この動作が望ましくない場合があります。したがって、各内部プロシージャ内でバッファを定義します。

バッファーを定義する理由は他にもありますが、テーブルと同じ名前のバッファーを定義するコードを見ると、通常はスコープに関するものです。

2: 常にバッファを介して DB にアクセスします。すべてのテーブルには、テーブルと同じ名前のデフォルト バッファがあるため、

find first <buffername>.

明示的に定義されたバッファまたは暗黙のデフォルト バッファである、buffername という名前のバッファを探します。優先順位は、明示的に定義されたバッファーが存在する場合に優先されます。

于 2011-03-30T17:52:33.747 に答える