2011-03-30 4 views
5

데이터베이스 테이블과 같은 이름의 버퍼를 만들기 :나는 여러 곳에서이 코드를 통해 실행했습니다

  1. 는 목적은 무엇인가 :

    DEFINE BUFFER Customer FOR Customer. 
    

    나는이 개 질문이 이의? 테이블과 같은 이름의 버퍼를 만드는 것이 왜 유익한가요?

  2. 이 테이블/버퍼에 액세스하기위한 코드를 작성할 때 Progress는 DB에 직접 액세스 할 것인지 아니면 버퍼를 통해 액세스 할 것인지를 어떻게 알 수 있습니까?

+0

@Tom Bascom 그가 잘 알고있다. Jon Skeet, 미안 그의 이름을 헛되이 말하면 유감스럽게 생각한다. – Kyle

답변

8

1 : 일반적으로 버퍼의 범위를 관리하기 위해 수행됩니다.

예를 들어, 모두 동일한 테이블에 액세스하는 내부 프로 시저가있는 프로 시저가있는 경우 해당 테이블의 기본 버퍼는 최상위 프로 시저 블록으로 범위가 지정됩니다. 예 :

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

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

고객 버퍼가 포함 된 절차로 범위가 지정됩니다. 내부 프로 시저를 느슨하게 결합하고 독립적으로 유지하려는 경우이 동작을 원하지 않을 수 있습니다. 따라서 각 내부 프로 시저 내에 버퍼를 정의 할 수 있습니다.

Obv 버퍼를 정의하는 다른 이유가 있지만 테이블과 같은 이름의 버퍼를 정의하는 코드를 볼 때 대개 범위에 관한 것입니다.

2 : 항상 버퍼를 통해 DB에 액세스합니다. 모든 테이블은 테이블과 같은 이름을 가진 기본 버퍼를 가지고 있으므로

find first <buffername>. 

는 명시 적으로 정의 된 버퍼 또는 암시 적 기본 버퍼 될 수있는 버퍼라는 이름의 buffername 찾습니다. 우선 순위는 명시 적으로 정의 된 버퍼가있는 경우 해당 버퍼로 이동합니다.

+1

이 기술의 큰 장점 중 하나는 우발적 인 부작용, 특히 레코드 잠금이 주요 절차 또는 기타 내부 절차. –

+1

Gordon에게 감사의 말을 전한다. 나는이 논리 뒤에있는 논리를 이해하지만, 명명 규칙에 동의하지 않습니다. 나에게 버퍼는 버퍼를 참조하고 있음을 명확히하기 위해 "b-"또는 다른 접두사가 붙어야한다. DB 테이블 이름을 버퍼 이름으로 사용하면 코드가 필요 이상으로 혼란스럽게 보일 수 있습니다. – pmartin

관련 문제