編譯內嵌 SQL 程式

因為內嵌 SQL 程式包含混合的 SQL 和主機語言陳述式,所以無法直接提交至主機語言的編譯器, 而是會透過多步驟程序加以編譯。 雖然此程序在各產品之間有所不同,但所有產品的步驟大致相同。

此圖顯示編譯內嵌 SQL 程式所需的步驟。

Steps to compile an embedded SQL program

編譯內嵌 SQL 程式涉及五個步驟:

  1. 內嵌 SQL 程式會提交至 SQL 先行編譯器,這是程式設計工具。 先行編譯器會掃描程式、尋找內嵌 SQL 陳述式,並加以處理。 DBMS 支援的每個程式設計語言,都需要不同的先行編譯器。 DBMS 產品通常會針對一種或多種語言提供先行編譯器,包括 C、Pascal、COBOL、Fortran、Ada、PL/I 和各種組合語言。

  2. 先行編譯器會產生兩個輸出檔案。 第一個檔案是來源檔案,其內嵌 SQL 陳述式已刪除。 先行編譯器會取代專屬 DBMS 常式的呼叫,這些呼叫提供程式與 DBMS 之間的執行階段連結。 一般而言,只有先行編譯器和 DBMS 才知道這些常式的名稱和呼叫順序;這些並非 DBMS 的公用介面。 第二個檔案是程式中使用的所有內嵌 SQL 陳述式之複本。 此檔案有時稱為資料庫要求模組或 DBRM。

  3. 先行編譯器的來源檔案輸出,會針對主機程式設計語言 (例如 C 或 COBOL 編譯器) 提交至標準編譯器。 編譯器會處理原始程式碼,並產生物件程式碼作為其輸出。 請注意,此步驟與 DBMS 或 SQL 無關。

  4. 連結器會接受編譯器所產生的物件模組,將模組與各種程式庫常式連結,並產生可執行檔程式。 連結至可執行檔程式的程式庫常式,包含步驟 2 中所述的專屬 DBMS 常式。

  5. 先行編譯器所產生的資料庫要求模組,會提交至特殊繫結公用程式。 此公用程式會檢查 SQL 陳述式,加以剖析、驗證及最佳化,然後針對每個陳述式產生存取計畫。 成果便是整個程式的合併存取計畫,呈現內嵌 SQL 陳述式的可執行版本。 繫結公用程式會將計畫儲存在資料庫中,通常會為計畫指派將使用它的應用程式名稱。 這個步驟是在編譯時間還是執行階段發生,則取決於 DBMS。

請注意,用來編譯內嵌 SQL 程式的步驟,會非常緊密地與處理 SQL 陳述式中所述的步驟相互關聯。 請特別注意,先行編譯器會將 SQL 陳述式與主機語言程式碼分開,而繫結公用程式會剖析並驗證 SQL 陳述式,並建立存取計畫。 於編譯時間進行步驟 5 的 DBMS 中,處理 SQL 陳述式的前四個步驟會在編譯時間進行,而最後一個步驟 (執行) 則在執行階段進行。 這使得在此類 DBMS 中執行查詢的效果十分快速。