私は多くの場所でこのコードに出くわしました:
DEFINE BUFFER Customer FOR Customer.
2 つの質問があります。
これの目的は何ですか?テーブルと同じ名前のバッファを作成すると便利なのはなぜですか?
このテーブル/バッファにアクセスするコードを書くとき、Progress は DB に直接アクセスするか、バッファを介してアクセスするかをどのように判断しますか?
私は多くの場所でこのコードに出くわしました:
DEFINE BUFFER Customer FOR Customer.
2 つの質問があります。
これの目的は何ですか?テーブルと同じ名前のバッファを作成すると便利なのはなぜですか?
このテーブル/バッファにアクセスするコードを書くとき、Progress は DB に直接アクセスするか、バッファを介してアクセスするかをどのように判断しますか?
1: 通常、バッファのスコープを管理するために行われます。
たとえば、すべてが同じテーブルにアクセスする多数の内部プロシージャを含むプロシージャがある場合、そのテーブルのデフォルト バッファは最上位のプロシージャ ブロックにスコープが設定されます。例えば -
procedure p1:
find first customer no-lock.
end.
procedure p2:
find last customer no-lock.
end.
含まれているプロシージャに顧客バッファのスコープを設定することになります。内部手順を疎結合して自己完結型にしようとしている場合は、この動作が望ましくない場合があります。したがって、各内部プロシージャ内でバッファを定義します。
バッファーを定義する理由は他にもありますが、テーブルと同じ名前のバッファーを定義するコードを見ると、通常はスコープに関するものです。
2: 常にバッファを介して DB にアクセスします。すべてのテーブルには、テーブルと同じ名前のデフォルト バッファがあるため、
find first <buffername>.
明示的に定義されたバッファまたは暗黙のデフォルト バッファである、buffername という名前のバッファを探します。優先順位は、明示的に定義されたバッファーが存在する場合に優先されます。