DL/I 데이터

IBM®은 1960년대에 계층 구조 데이터베이스 관리 시스템으로서 DL/I(Data Language/One)를 개발했습니다. DL/I는 오늘날 COBOL 프로그램에서 널리 사용되는 데이터베이스 시스템이 되었습니다.

다음 용어 및 개념은 DL/I 데이터베이스 프로그램 개발에서 필수입니다.
세그먼트
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가 데이터베이스에서 검색하는 세그먼트를 선택하거나 데이터베이스에 삽입하는 세그먼트의 위치를 지정하는 데 사용하는 검색 기준 세트를 나열합니다.
COBOL 또는 PL/I 같은 언어로 DL/I 프로그램을 코드화할 때 DL/I 매개변수 목록을 직접 코드화하거나 CICS®의 명령 레벨 인터페이스를 사용하여 DL/I 매개변수 목록을 작성합니다. EGL은 I/O 문과 PCB에서 DL/I 세그먼트의 위치를 기반으로 DL/I 매개변수 목록을 작성합니다. 함수에 대해 작성된 DL/I 호출을 볼 수 있습니다. 추가 DL/I 함수를 사용하기 위해 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 예제의 내용을 참조하십시오.