Embedded SQL 프로그램 컴파일
포함된 SQL 프로그램에는 SQL 및 호스트 언어 문이 혼합되어 있으므로 호스트 언어에 대한 컴파일러에 직접 제출할 수 없습니다. 대신 다중 단계 프로세스를 통해 컴파일됩니다. 이 프로세스는 제품마다 다르지만 단계는 모든 제품에 대해 거의 동일합니다.
이 그림에서는 포함된 SQL 프로그램을 컴파일하는 데 필요한 단계를 보여 줍니다.
포함된 SQL 프로그램을 컴파일하는 데는 5단계가 포함됩니다.
포함된 SQL 프로그램은 프로그래밍 도구인 SQL 미리 컴파일러에 제출됩니다. 미리 컴파일러는 프로그램을 검색하고 포함된 SQL 문을 찾아서 처리합니다. DBMS에서 지원하는 각 프로그래밍 언어에는 다른 미리 컴파일러가 필요합니다. DBMS 제품은 일반적으로 C, Pascal, COBOL, Fortran, Ada, PL/I 및 다양한 어셈블리 언어를 비롯한 하나 이상의 언어에 대한 미리 컴파일러를 제공합니다.
미리 컴파일러는 두 개의 출력 파일을 생성합니다. 첫 번째 파일은 포함된 SQL 문이 제거된 소스 파일입니다. 해당 위치에서 사전 컴파일러는 프로그램과 DBMS 간의 런타임 링크를 제공하는 전용 DBMS 루틴에 대한 호출을 대체합니다. 일반적으로 이러한 루틴의 이름 및 호출 시퀀스는 미리 컴파일러 및 DBMS에만 알려져 있습니다. DBMS에 대한 공용 인터페이스가 아닙니다. 두 번째 파일은 프로그램에 사용되는 모든 포함된 SQL 문의 복사본입니다. 이 파일을 데이터베이스 요청 모듈 또는 DBRM이라고도 합니다.
사전 컴파일러의 원본 파일 출력은 호스트 프로그래밍 언어(예: C 또는 COBOL 컴파일러)에 대한 표준 컴파일러에 제출됩니다. 컴파일러는 소스 코드를 처리하고 개체 코드를 출력으로 생성합니다. 이 단계는 DBMS 또는 SQL과는 아무 상관이 없습니다.
링커는 컴파일러에서 생성된 개체 모듈을 수락하고, 다양한 라이브러리 루틴과 연결하고, 실행 프로그램을 생성합니다. 실행 프로그램에 연결된 라이브러리 루틴에는 2단계에서 설명한 독점 DBMS 루틴이 포함됩니다.
미리 컴파일러에서 생성된 데이터베이스 요청 모듈은 특수 바인딩 유틸리티에 제출됩니다. 이 유틸리티는 SQL 문을 검사하고, 구문 분석하고, 유효성을 검사하고, 최적화한 다음, 각 문에 대한 액세스 계획을 생성합니다. 결과는 포함된 SQL 문의 실행 버전을 나타내는 전체 프로그램에 대한 결합된 액세스 계획입니다. 바인딩 유틸리티는 일반적으로 계획을 사용할 애플리케이션 프로그램의 이름을 할당하여 데이터베이스에 계획을 저장합니다. 이 단계가 컴파일 시간에 수행되는지 런타임에 수행되는지 여부는 DBMS에 따라 달라집니다.
포함된 SQL 프로그램을 컴파일하는 데 사용되는 단계는 SQL 문 처리의 앞부분에서 설명한 단계와 매우 밀접하게 연관됩니다. 특히 미리 컴파일러는 SQL 문을 호스트 언어 코드와 분리하고 바인딩 유틸리티는 SQL 문을 구문 분석하고 유효성을 검사하고 액세스 계획을 만듭니다. 컴파일 시간에 5단계가 발생하는 DBMS에서는 SQL 문을 처리하는 처음 4단계가 컴파일 시간에 수행되는 반면, 마지막 단계(실행)는 런타임에 수행됩니다. 이렇게 하면 이러한 DBMS에서 쿼리를 매우 빠르게 실행할 수 있습니다.