日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

完全版 ESQL/C資料二( 二 )


在使用宿主變量前,請(qǐng)注意以下幾點(diǎn):
l宿主變量的長(zhǎng)度不能超過30字節(jié) 。開始的字母不能是EXEC和SQL 。
l宿主變量必須在被引用之前定義 。
l一個(gè)源程序文件中可以有多個(gè)SQL說明段 。
l宿主變量名在整個(gè)程序中必須是唯一的 。
2)、宿主變量的數(shù)據(jù)類型
宿主變量是一個(gè)用程序設(shè)計(jì)語(yǔ)言的數(shù)據(jù)類型說明并用程序設(shè)計(jì)語(yǔ)言處理的程序變量;另外,在嵌入SQL語(yǔ)句中用宿主變量保存數(shù)據(jù)庫(kù)數(shù)據(jù) 。所以,在嵌入SQL語(yǔ)句中,必須映射C數(shù)據(jù)類型為合適的DB2數(shù)據(jù)類型 。必須慎重選擇宿主變量的數(shù)據(jù)類型 。請(qǐng)看下面這個(gè)例子:
EXEC SQL BEGIN DECLARE SECTION;
short hostvar1 = 39;
char *hostvar2 = "telescope";
EXEC SQL END DECLARE SECTION;EXEC SQL UPDATE inventory
SET department = :hostvar1
WHERE part_num = "4572-3";EXEC SQL UPDATE inventory
SET prod_descrip = :hostvar2
WHERE part_num = "4572-3";
在第一個(gè)update語(yǔ)句中,department列為smallint數(shù)據(jù)類型,所以應(yīng)該把hostvar1定義為short數(shù)據(jù)類型 。這樣的話,從C到DB2的hostvar1可以直接映射 。在第二個(gè)update語(yǔ)句中,prod_descip列為varchar數(shù)據(jù)類型,所以應(yīng)該把hostvar2定義為字符數(shù)組 。這樣的話,從C到DB2的hostvar2可以從字符數(shù)組映射為varchar數(shù)據(jù)類型 。
下表列出了C的數(shù)據(jù)類型和DB2的數(shù)據(jù)類型的一些轉(zhuǎn)換關(guān)系:
DB2數(shù)據(jù)類型C數(shù)據(jù)類型
Smallintshort
IntegerLong
Decimal(p,s)無(wú)
DoubleDouble
DateChar[11]
TimeChar[9]
TimestampChar[27]
Char(X)Char[X 1]
Varchar(X)Char[X 1]
Graphic(X)Wchar_t[X 1]
Vargraphic(X)Wchar_t[X 1]
因?yàn)镃沒有date或time數(shù)據(jù)類型,所以DB2的date或time列將被轉(zhuǎn)換為字符 。缺省情況下,使用以下轉(zhuǎn)換格式:mm dd yyyy hh:mm:ss[am | pm] 。你也可以使用字符數(shù)據(jù)格式將C的字符數(shù)據(jù)存放到DB2的date列上 。對(duì)于DECIMAL數(shù)據(jù)類型,在C語(yǔ)言中也沒有對(duì)應(yīng)的數(shù)據(jù)類型 。但可以使用char數(shù)據(jù)類型實(shí)現(xiàn) 。
3)、宿主變量和NULL
大多數(shù)程序設(shè)計(jì)語(yǔ)言(如C)都不支持NULL 。所以對(duì)NULL的處理,一定要在SQL中完成 。我們可以使用主機(jī)指示符變量來(lái)解決這個(gè)問題 。在嵌入式SQL語(yǔ)句中,宿主變量和指示符變量共同規(guī)定一個(gè)單獨(dú)的SQL類型值 。指示變量和前面宿主變量之間用一個(gè)空格相分隔 。如:
EXEC SQL SELECT price INTO :price :price_nullflag FROM titles
WHERE au_id = "mc3026"
其中,price是宿主變量,price_nullflag是指示符變量 。指示符變量的值為:
l-1 。表示宿主變量應(yīng)該假設(shè)為NULL 。(注意:宿主變量的實(shí)際值是一個(gè)無(wú)關(guān)值,不予考慮) 。
l=0 。表示宿主變量不是NULL 。
l>0 。表示宿主變量不是NULL 。而且宿主變量對(duì)返回值作了截?cái)?,指示變量存放了截?cái)鄶?shù)據(jù)的長(zhǎng)度 。
所以,上面這個(gè)例子的含義是:如果不存在mc3026寫的書,那么price_nullflag為-1,表示price為NULL;如果存在,則price為實(shí)際的價(jià)格 。
指示變量也是一種宿主變量,也需要在程序中定義,它對(duì)應(yīng)數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)類型為SMALLINT 。為了便于識(shí)別宿主變量,當(dāng)嵌入式SQL語(yǔ)句中出現(xiàn)宿主變量時(shí),必須在變量名稱前標(biāo)上冒號(hào)(:) 。冒號(hào)的作用是,告訴預(yù)編譯器,這是個(gè)宿主變量而不是表名或列名 。
3.2.2單行查詢
單行查詢是通過SELECT INTO語(yǔ)句完成 。當(dāng)這條語(yǔ)句執(zhí)行時(shí),查詢的結(jié)果送入INTO所標(biāo)志的變量中 。如果SQLCODE是100,或者SQLSTATE是02000,則說明沒有查詢到結(jié)果或返回結(jié)果為NULL,這時(shí),宿主變量不改變,否則,宿主變量中將包含查詢的結(jié)果 。如:
………….
EXEC SQL SELECT FIRSTNME INTO :firstname
FROM employee
WHERE LASTNAME = "JOHNSON";
………….3.2.3多行查詢
對(duì)于多行結(jié)果,必須使用游標(biāo)來(lái)完成 。游標(biāo)是一個(gè)與SELECT語(yǔ)句相關(guān)聯(lián)的符號(hào)名,它使用戶可逐行訪問由DB2返回的結(jié)果集 。下面這個(gè)例子演示了游標(biāo)的使用方法 。這個(gè)例子的作用是,逐行打印出每個(gè)經(jīng)理的名字和部門 。

推薦閱讀