編程環(huán)境下的SQL也稱嵌入式SQL(Embedded SQL, ESQL),是一種將SQL語句直接寫入C、C++、JAVA等編程語言中的使用方式,從而讓應(yīng)用程序擁有了訪問數(shù)據(jù)庫、操作數(shù)據(jù)的能力。這些嵌入SQL的語言稱為宿主語言。
為提供對嵌入式SQL的支持,數(shù)據(jù)庫廠商需要提供DBMS和一些工具,并且在技術(shù)上必須解決以下4個(gè)問題:
- 宿主語言的編譯器不可能識別和接受SQL語言,所以需要解決如何將宿主語言源代碼中的SQL編譯成可執(zhí)行碼;
- 宿主語言的應(yīng)用程序如何與DBMS之間傳遞數(shù)據(jù)和消息;
- 如何把對數(shù)據(jù)的查詢結(jié)果逐次賦值給宿主語言程序中的變量,以供其處理;
- 有時(shí),數(shù)據(jù)庫的數(shù)據(jù)類型與宿主語言的數(shù)據(jù)類型不完全對應(yīng)或等價(jià),如何解決必要的數(shù)據(jù)類型轉(zhuǎn)換問題;
為了解決以上問題,數(shù)據(jù)庫廠商采用兩種方法處理:一種是預(yù)編譯;另一種是修改和擴(kuò)充宿主語言,使之能處理SQL語句。目前采用較多的是預(yù)編譯的方法。數(shù)據(jù)庫廠商需要提供一個(gè)嵌入式SQL的預(yù)編譯器,對源程序進(jìn)行掃描,識別出SQL語句,把它們轉(zhuǎn)換成主語言調(diào)用語句,以使宿主語言編譯程序能識別它,最后由主語言的編譯程序?qū)⒄麄€(gè)源程序編譯成目標(biāo)碼。