国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 信息時(shí)代 > 嵌入式SQL(數(shù)據(jù)庫(kù))

嵌入式SQL(數(shù)據(jù)庫(kù))

時(shí)間:2022-11-06 18:30:02 | 來源:信息時(shí)代

時(shí)間:2022-11-06 18:30:02 來源:信息時(shí)代

    嵌入式SQL : SQL語(yǔ)言的一種使用方式,它將SQL文本嵌入到某種特定的程序設(shè)計(jì)語(yǔ)言文本中構(gòu)成編譯單元。這種方式允許數(shù)據(jù)庫(kù)應(yīng)用被表達(dá)成混合形式,從而能夠利用程序設(shè)計(jì)語(yǔ)言的過程性結(jié)構(gòu)來彌補(bǔ)SQL語(yǔ)言實(shí)現(xiàn)復(fù)雜應(yīng)用方面的不足。
有關(guān)嵌入式SQL的語(yǔ)法,在SQL99中由第五部分“主語(yǔ)言綁定”專門說明,在SQL2003中因該部分與第二部分聯(lián)系非常緊密而與之合并,第五部分從此不再存在。
嵌入SQL文本的程序設(shè)計(jì)語(yǔ)言被稱為宿主語(yǔ)言。SQL文本可以被嵌入到多種宿主語(yǔ)言文本中,目前SQL標(biāo)準(zhǔn)中指定了標(biāo)準(zhǔn)嵌入式語(yǔ)法的宿主語(yǔ)言有Ada、C、COBOL、FORTRAN、MUMPS、PASCAL和PL/I,并要求SQL實(shí)現(xiàn)必須至少支持其中一種。SQL文本由一個(gè)或多個(gè)嵌入SQL語(yǔ)句和可選的一個(gè)或多個(gè)嵌入SQL聲明段構(gòu)成。在嵌入SQL的宿主程序中,任何允許出現(xiàn)可執(zhí)行的宿主語(yǔ)言語(yǔ)句的地方,都允許出現(xiàn)可執(zhí)行的SQL語(yǔ)句; 任何允許出現(xiàn)說明性宿主語(yǔ)言語(yǔ)句的地方,都允許出現(xiàn)SQL聲明段。SQL 聲明段以 EXEC SQL BEGIN DECLARE SECTION開始,以EXEC SQL END DECLARE SECTION結(jié)束,中間可聲明變量。
在使用標(biāo)準(zhǔn)程序設(shè)計(jì)語(yǔ)言編譯器對(duì)宿主程序進(jìn)行編譯之前,需要對(duì)其進(jìn)行預(yù)處理,將嵌入的SQL語(yǔ)句及宿主變量聲明替換為宿主語(yǔ)言編譯器能夠識(shí)別的形式,這個(gè)過程稱為預(yù)編譯。為了能夠區(qū)分SQL語(yǔ)句與宿主語(yǔ)言語(yǔ)句,標(biāo)準(zhǔn)規(guī)定所有SQL語(yǔ)句前都必須加上SQL前綴(如EXEC SQL),并以SQL終結(jié)符(如END-SQL)結(jié)束,但不同宿主語(yǔ)言的SQL前綴和終結(jié)符可能是不一樣的。
SQL標(biāo)準(zhǔn)將SQL聲明段中聲明的變量稱為宿主變量,宿主變量可以用來在程序和SQL數(shù)據(jù)之間傳送數(shù)據(jù)。嵌入式SQL語(yǔ)句可以在任何可以放置標(biāo)量表達(dá)式的地方含有宿主語(yǔ)言變量,但宿主變量必須前置一個(gè)冒號(hào)以同SQL對(duì)象名相區(qū)別。根據(jù)宿主變量的作用,可以將其分為輸入變量、輸出變量和指示符變量。輸入變量用于向DBMS輸入數(shù)據(jù)。輸出變量用于接收從DBMS輸出的數(shù)據(jù)。指示符變量是一個(gè)數(shù)值型變量,當(dāng)輸入輸出值可能為null值時(shí),可以在相應(yīng)的宿主變量后跟隨一個(gè)宿主變量。對(duì)于輸入宿主變量,任何小于0的指示符值的意思是傳送的值為null,而任何指示符值大于等于0的意思是傳送的是一個(gè)非空值; 對(duì)于輸入宿主變量,規(guī)定指示符值-1表示傳送的值為null,而0表示傳送的值為非空值。
SQL語(yǔ)言與宿主語(yǔ)言之間存在阻抗不匹配問題,即: SQL是在集合上操作,而宿主語(yǔ)言是在集合成員上操作。為解決上述問題,SQL標(biāo)準(zhǔn)提供對(duì)游標(biāo)的支持。游標(biāo)是對(duì)SQL數(shù)據(jù)進(jìn)行操作的一種機(jī)制,通過它每次對(duì)表的一行進(jìn)行操作??梢赃@樣理解游標(biāo)的作用: 游標(biāo)與一個(gè)SQL查詢檢索到的結(jié)果表相關(guān)聯(lián),它指向結(jié)果表中的一行,并且可以在結(jié)果表的行之間移動(dòng)。當(dāng)游標(biāo)正指向某一行,即“定位”在這一行上時(shí),可以使用更新語(yǔ)句或刪除語(yǔ)句的“定位”形式來更新或刪除這一行。為使游標(biāo)正常地工作,通常需要包括四個(gè)動(dòng)作: 聲明游標(biāo)、打開游標(biāo)、獲取游標(biāo)和關(guān)閉游標(biāo)。在SQL標(biāo)準(zhǔn)中,這些功能分別由聲明游標(biāo)語(yǔ)句、打開語(yǔ)句、獲取語(yǔ)句和關(guān)閉語(yǔ)句實(shí)現(xiàn)。在動(dòng)態(tài)SQL方式下,還可以動(dòng)態(tài)聲明和操縱游標(biāo)。
SQL標(biāo)準(zhǔn)還提供了一套診斷機(jī)制,使得應(yīng)用程序能夠獲知SQL語(yǔ)句的執(zhí)行情況?;镜脑\斷信息項(xiàng)目SQLSTATE。SQLSTATE是一個(gè)5字符變量,可以在SQL聲明段中定義。在每個(gè)SQL語(yǔ)句之后,DBMS會(huì)將一個(gè)值(狀態(tài)代碼)放入SQLSTATE。狀態(tài)代碼由數(shù)字和字母構(gòu)成。前兩個(gè)數(shù)字或字母是“類”,描述狀態(tài)的一般類別: 接下來的三個(gè)數(shù)字或字母是“子類”,表示進(jìn)一步的狀態(tài)信息。例如:類“00”表示“SUCCESS”;類“01”表示“WARNING”;類“02”表示“NO DATA”;其他類表示“ERROR”等。此外,通過獲取診斷語(yǔ)句還可以得到更詳細(xì)的語(yǔ)句執(zhí)行信息。
以下是一個(gè)嵌入式C程序范例,該程序檢索表tab_1中的列col_1,并將每一行中該列的值顯示在屏幕上。
#include <stdio.h>
EXEC BEGIN DECLARE SECTION;int x; /*輸出宿主變量*/
int x_indicator; /*指示符變量*/
EXEC SQL END DECLARE SECTION;
int i;
void main()
{
EXEC SQL CONNECT TO db_server USER user_1;/*連接數(shù)據(jù)庫(kù)*/
EXEC SQL DECLARE cur_1 CURSOR FOR SELECT col_1 FROM tab_1;
EXEC SQL OPEN cur_1;
for(;;){
EXEC SQL FETCH cur_1
INTO :x :x_indicator;
if(!strncmp(SQLSTATE,“02000”,5))
break; /*若無返回?cái)?shù)據(jù),則跳出循環(huán)*/
if(x_indicator<0)printf(“NULL/n”);
else printf(“%d/n”,x);
}
EXEC SQL CLOSE cur_1;
EXEC SQL DISCONNECT db_server;
}
嵌入式SQL曾經(jīng)是一種主流的數(shù)據(jù)庫(kù)應(yīng)用開發(fā)技術(shù),但由于其與宿主語(yǔ)言間的這種接口形式通用性較差,目前已逐漸為其他的接口形式所取代。

74
73
25
news

版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉