DL/I 데이터
IBM®은 1960년대에 계층 구조 데이터베이스 관리 시스템으로서 DL/I(Data Language/One)를 개발했습니다. DL/I는 오늘날 COBOL 프로그램에서 널리 사용되는 데이터베이스 시스템이 되었습니다.
- 세그먼트
- DL/I 데이터베이스에서 기본 데이터 단위는 세그먼트입니다. 세그먼트는 레코드와 유사합니다. 세그먼트는 데이터 필드로 나뉘는 단일 데이터 블록입니다.
- 데이터베이스 계층 구조
- 단일 데이터베이스는 여러 유형의 세그먼트를 포함할 수 있습니다. 이러한 세그먼트는 계층 구조(하향식) 관계로 배열됩니다. 계층 구조 맨 위에 있는 세그먼트를 루트 세그먼트라고 합니다. 각 세그먼트는 계층 구조 하위 레벨에서 세그먼트와 관련된 하나 이상의 종속 세그먼트를 가질 수 있습니다. 종속 세그먼트가 있는 세그먼트를 종속 세그먼트의 상위라고 합니다. 종속 세그먼트는 하위 세그먼트라고 합니다. 루트 세그먼트를 제외하고 데이터베이스의 각 세그먼트는 하나의 상위 세그먼트만 가집니다. 루트 세그먼트에는 상위가 없습니다.
- 시퀀스 필드
- 데이터베이스의 각 세그먼트 유형에는 필드 중 하나가 시퀀스 필드로 지정됩니다. 시퀀스 필드의 값은 세그먼트가 저장되고 데이터베이스에서 검색되는 순서를 판별합니다. 상위 세그먼트에 동일한 하위 세그먼트 유형이 여러 개 나타나고 하위 세그먼트에 대해 시퀀스 필드가 정의된 경우 DL/I는 해당 하위 세그먼트를 시퀀스 필드 순서에 따라 상위 세그먼트 아래에 저장합니다.
- PSB(Program Specification Block)
- PSB는 프로그램이 액세스할 수 있는 계층 구조 데이터베이스 구조의 정규 DL/I 설명입니다. PSBRecord 유형의 EGL 레코드 파트에는 프로그램이 DL/I PSB와 상호작용하는 데 필요한 정보가 포함되어 있습니다. PSB는 세그먼트 유형 간에 존재하는 계층 구조 관계를 표시합니다. 자세한 정보는 EGL 언어 참조에서 PSB와 PCB를 사용하는 데이터 액세스의 내용을 참조하십시오.
- PCB(Program Communication Block)
- PCB는 PSB의 항목입니다. 각 데이터베이스 PCB는 프로그램이 사용할 수 있는 하나의 계층 구조 데이터 구조를 설명합니다. 데이터 구조는 실제 또는 논리적 DL/I 데이터베이스 구조에 직접 해당하거나 보조 색인에 의한 액세스를 통해 데이터베이스 구조를 반전시킬 수 있습니다.
- DL/I 호출
- DL/I 호출은 프로그램에 의한 DL/I의 호출입니다. 데이터베이스 호출을 위해
전달되는 매개변수 목록은 DL/I에 다음 정보를 제공합니다.
- 함수 코드
- DL/I가 데이터베이스에서 세그먼트를 가져오기, 삽입, 바꾸기 또는 삭제하기 위한 것인지 여부를 표시합니다.
- 데이터베이스 ID
- CBLTDLI를 사용하는 DL/I 호출의 경우 호출 시 DL/I가 액세스하는 데이터베이스를 식별하는 PCB(Program Communication Block)를 나타냅니다. AIBTDLI를 사용하는 DL/I 호출의 경우 PSB의 PCB 이름을 제공합니다.
- I/O 영역 주소
- 데이터베이스에서 읽은 후 또는 데이터베이스에 기록하기 전에 세그먼트를 포함하는 버퍼의 주소를 식별합니다.
- SSA(Segment search argument) 목록
- DL/I가 데이터베이스에서 검색하는 세그먼트를 선택하거나 데이터베이스에 삽입하는 세그먼트의 위치를 지정하는 데 사용하는 검색 기준 세트를 나열합니다.
- 데이터베이스 위치
- 프로그램이 실행 중인 경우 DL/I에서 프로그램 PSB의 각 PCB에 대한
위치 포인터를 유지보수합니다. 포인터는 세그먼트 검색을 위해
get next 문이 검색을 시작하는
데이터베이스 내의 위치를 표시합니다.
위치 포인터는 호출 시 마지막으로 액세스한 세그먼트 다음에 있는 세그먼트를 가리키는 DL/I 호출이 성공적인 경우 설정됩니다. 호출이 발행되지 않으면 현재 위치가 데이터베이스의 시작을 표시합니다. 데이터베이스 조건의 끝이 발견되면 현재 위치가 데이터베이스의 시작이 됩니다.
DL/I에서 SSA 목록 기준에 부합하는 세그먼트를 찾기 위해 데이터베이스에 대한 검색을 계속하는 동안 DL/I에서 데이터베이스에 표시되는 순서대로 각 루트 세그먼트에 액세스합니다. DL/I에서 루트 세그먼트를 발견하면 다음 루트를 스캔하기 전에 루트의 모든 종속자에 액세스합니다. DL/I에서 종속 세그먼트를 스캔할 때 먼저, 다음 하위 레벨에서 다음 세그먼트를 읽으려고 시도합니다. 하위 레벨이 없는 경우 동일한 레벨의 다음 세그먼트를 읽습니다. 현재 레벨에 더 이상 세그먼트가 없으면 이전 레벨로 돌아가서 다음 세그먼트를 검색합니다. 이 프로세스를 “위에서 아래로, 왼쪽에서 오른쪽으로” 검색 순서라고 합니다.
관계형 데이터베이스에 액세스하는 데 사용하는 것과 동일한 다수의 EGL 문을 사용하여 DL/I 데이터베이스에 액세스하는 EGL 프로그램을 작성할 수 있습니다: add, delete, get, replace. EGL 문이 DLISegment 스테레오타입을 기반으로 레코드 변수를 지정할 때 EGL은 DL/I 데이터베이스로 작업하는 코드를 생성하는 것을 이해합니다.
SQL을 사용한 것처럼 EGL에서 전체 DL/I 프로그램을 쓰거나 명시적인 DL/I 코드를 지정하여 세부사항에 대한 추가 제어를 가져올 수 있습니다. 이 경우 사용자가 DL/I 의사 코드를 작성하고 EGL이 이를 실제 DL/I 명령으로 변환합니다.
예제 DL/I 데이터베이스 레이아웃의 다이어그램은 예제 DL/I 데이터베이스의 내용을 참조하십시오. 공통 DL/I 코드 문제점에 대한 샘플 솔루션은 DL/I 예제의 내용을 참조하십시오.