嵌入式SQL

嵌入式SQL

嵌入式SQL(英文 Embedded SQL)是一種將SQL語句直接寫入C語言,COBOL,FORTRAN, Ada等程式語言的原始碼中的方法。

簡介

嵌入式SQL工作原理 嵌入式SQL工作原理

嵌入式SQL(英文: Embedded SQL)是一種將SQL語句直接寫入C語言,COBOL,FORTRAN, Ada等程式語言的原始碼中的方法。藉此方法,可使得應用程式擁有了訪問數據以及處理數據的能力。在這一方法中,將SQL文嵌入的目標源碼的語言稱為宿主語言。

在SQL標準的SQL86(1986年發布)中定義了對於COBOL, FORTRAN, PI/L等語言的嵌入式SQL的規範。在SQL89(1989年發布)規範中,定義了對於C語言的嵌入式SQL的規範。一些大型的資料庫廠商發布的資料庫產品中,都提供了對於嵌入式SQL的支持。比如Oracle, DB2等 。

工作原理

提供對於嵌入式SQL的支持,需要資料庫廠商除了提供DBMS之外,還必須提供一些工具。為了實現對於嵌入式SQL的支持,技術上必須解決以下4個問題:

1.宿主語言的編譯器不可能識別和接受SQL文,需要解決如何將SQL的宿主語言原始碼編譯成可執行碼;

2.宿主語言的應用程式如何與DBMS之間傳遞數據和訊息;

3.如何把對數據的查詢結果逐次賦值給宿主語言程式中的變數以供其處理;

4.資料庫的數據類型與宿主語言的數據類型有時不完全對應或等價,如何解決必要的數據類型轉換問題。

嵌入式SQL源碼的處理流程 為了解決上述這些問題,資料庫廠商需要提供一個嵌入式SQL的預編譯器,把包含有嵌入式SQL文的宿主語言源碼轉換成純宿主語言的代碼。這樣一來,源碼即可使用宿主語言對應的編譯器進行編譯。通常情況下,經過嵌入式SQL的預編譯之後,原有的嵌入式SQL會被轉換成一系列函式調用。因此,資料庫廠商還需要提供一系列函式館,以確保連結器能夠把代碼中的函式調用與對應的實現連結起來 。

擴展語法

嵌入式SQL中除了可以執行標準SQL文之外,為了對應嵌入的需要,還增加了一些額外的語法成分。主要包含以下內容:

•宿主變數使用聲明的語法

•資料庫訪問的語法

•事務控制的語法

•游標操作的語法

資料庫產品

支持嵌入式SQL的資料庫產品以下列出支持嵌入式SQL的資料庫產品以及各自支持的宿主語言Oracle DatabaseAda Pro*Ada在Oracle 7.3的版本中被加入產品族,並且在Oracle 8中被替換為SQL*Module。但在此之後就一直沒有更新。SQL*Module支持Ada 83.C/C++ Pro*C 在Oracle 8 時被替換成了Pro*C/C++。之後Pro*C/C++ 到Oracle Database 11g仍都在被支持。COBOL Pro*COBOL到Oracle Database 11g仍都在被支持。Fortran Pro*FORTRAN 在Oracle 8之後的Oracle版本中就不再被更新,但Bug修正仍在維護中。Pascal Pro*Pascal在Oracle 8之後的Oracle版本中就不再被更新[3]。PI/L Pro*PL/I 自Oracle 8之後就不再被更新,但文檔中仍然有記述。IBM DB2IBM DB2的版本9中提供了對於C/C++,COBOL,Java等宿主語言的嵌入式SQL的支持。

PostgreSQLC/C++ PostgreSQL 自版本6.3起就提供了對於C/C++的嵌入式SQL的支持,以ECPG組件的形式存在 。

嵌入形式

對宿主型資料庫語言SQL,DBMS可以採用兩種方法處理,一種是預編譯,另一種是修改和擴充主語言使之能處理SQL語句。目前採用較多的是預編譯的方法。即有DBMS的預處理程式對源程式進行掃描,識別出SQL語句,把它們轉換成主語言調用語句,以使主語言編譯程式能識別它,最後由主語言的編譯程式將整個源程式編譯成目標碼。

在嵌入式SQL中,為了能夠區分SQL語句與主語言語句,所以SQL語句都必須加前綴EXEC SQL。SQL語句的結束標準則隨主語言的不同而不同。

例如:在PL/1和C中以分號(;)結束:

EXEC SQL<SQL 語句>;

在COBOL中以END-EXEC結束:

EXEC SQL<SQL語句> END-EXEC

例如一條互動形式的SQL語句:

DROP TABLE Student;

嵌入到C程式中應寫作:EXEC SQL DROP TABLE Student;

相關詞條

相關搜尋

熱門詞條

聯絡我們