Decode360's Blog

          業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          公告

          常用鏈接

          隨筆分類(299)

          隨筆檔案(299)

          文章分類(26)

          新聞分類(24)

          收藏夾(5)

          Blog列表

          IT網(wǎng)站

          My Link

          最新隨筆

          最新評論

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

          ??? 使用嵌入式SQL,必須解決如下幾個問題:

          ??? (1)SQL語言和宿主語言的數(shù)據(jù)類型可能不完全一致,必須解決數(shù)據(jù)類型的轉(zhuǎn)換問題,這與DBMS和其支持的宿主語言有關(guān)。
          ??? (2)用SQL語句查詢數(shù)據(jù)庫的結(jié)果是元組的集合,而宿主語言只支持?jǐn)?shù)字型、字符性、數(shù)組和記錄等數(shù)據(jù)類型,不支持集合和關(guān)系類型。
          為此,要通過SQL語句使用的宿主變量逐個地把每個元組傳遞給宿主語言中的程序變量。宿主語言編譯器不能識別和接受在宿主語言中的SQL語句代碼,必須把嵌入有SQL 語句的宿主語言程序翻譯成標(biāo)準(zhǔn)的宿主語言語句再進(jìn)行編譯,或直接產(chǎn)生可執(zhí)行的代碼,這是首先要解決的問題。為此,通常先對嵌入有SQL語句的宿主語言程序進(jìn)行預(yù)處理,翻譯成標(biāo)準(zhǔn)的宿主語言語句,再用宿主語言編譯器進(jìn)行編譯。數(shù)據(jù)庫和宿主語言之間如何通過宿主變量傳遞數(shù)據(jù)和信息。
          ??? (3)在宿主語言程序中如何判斷SQL語句執(zhí)行的正確或錯誤?

          ??? 下面對這些問題逐一給出解答。

          1.嵌入式SQL語言的使用格式

          ??? 為了把SQL語句嵌入主程序設(shè)計語言中,并且在主程序設(shè)計語言的源代碼中能夠區(qū)分宿主語言的語句和嵌入的SQL語句,便于預(yù)處理程序識別它,必須有開始和結(jié)束的語句塊標(biāo)識符,把SQL語句括在其中。通常在SQL語句前面加上前綴表示"EXEC SQL",并以"END_EXEC"作為語句結(jié)束的標(biāo)志,構(gòu)成EXEC SQL <SQL 語句> END_EXEC的嵌入語句塊,如下所示:
          ?
          開始標(biāo)識符:'EXEC SQL'
          <嵌入的SQL語句>
          結(jié)束標(biāo)識符:'END_SQL'

          ??? 說明:SQL語句的結(jié)束標(biāo)志隨著宿主語言的不同而有差別。因此,嵌入式SQL的確切語法依賴于宿主語言。當(dāng)宿主語言為C、PL/1或Pascal時,嵌入語句塊的結(jié)束符使用分號';',不使用'END_SQL'。
            Oracle數(shù)據(jù)庫系統(tǒng)提供了Pro*C語言,在C語言中可嵌入SQL語句,以分號';'作為結(jié)束標(biāo)識符。為了方便起見,下面的示例程序中,嵌入語句塊以EXEC SQL開始,用分號';'作為結(jié)束標(biāo)志。

          2.共享主變量的聲明

          ??? 凡在SQL語句中使用的、用于與宿主語言交換數(shù)據(jù)的變量,稱為宿主變量,簡稱主變量。主變量也必須用開始和結(jié)束標(biāo)識符括起來進(jìn)行聲明。只有這樣聲明的主變量才能用于SQL與宿主語言交換數(shù)據(jù),所以主變量是SQL和宿主語言共享的變量。
          ??? 主變量是主語言的變量,所以主變量的說明必須遵從宿主語言的規(guī)定,但主變量類型必須是兩種語言都能處理的。

          主變量的聲明格式:EXEC SQL BEGIN DECLARE SECTION
          <SQL 宿主變量說明>
          EXEC SQL END DECLARE SECTION

            這些共享的變量在宿主語言中使用時同其他變量一樣,當(dāng)在SQL語句中使用宿主變量時,宿主變量前必須要冠以某種特殊符號,用以區(qū)別宿主變量和SQL語句中的列名。Oracle的宿主變量前使用冒號':',SQL Server中使用 '@' 符號。例如,@xy,@post等,稱為SQL Server的局部變量。
            在SQL中可以使用共享宿主變量實現(xiàn)與宿主語言之間傳遞具體的值。下面的例子是在C語言中嵌入SQL語句,使用共享宿主變量時在前面加上冒號。

          例1:聲明三個主變量,如下描述:
          EXEC SQL BEGIN DECLARE SECTION
          Char sname[20], ssex[1];
          Char sclass[10];
          EXEC SQL END DECLARE SECTION

          ??? 說明:上面的例子夾在嵌入式SQL標(biāo)識語句之間的是宿主變量的聲明,只有宿主語言和SQL都能處理的變量類型才有意義。中間的語句說明了三個變量 sname,ssex,sclass,都是字符數(shù)組,用來保存學(xué)生的姓名、性別、班級編號。它們的說明形式必須遵從宿主語言的規(guī)定。例如,上面的例子中,就是因為宿主語言是C語言而采用的說明形式。

          3.特殊的系統(tǒng)變量
          ?
          ??? 每個數(shù)據(jù)庫管理系統(tǒng)都提供一個專用的系統(tǒng)變量SQLSTATE,記錄SQL語句執(zhí)行的狀態(tài)。每當(dāng)執(zhí)行完一個SQL語句之后,一個代碼便被放入到該系統(tǒng)變量SQLSTATE中,該代碼標(biāo)識SQL語句執(zhí)行情況。在程序中,要使用SQLSTATE主變量,也必須要事先說明,并在每一個SQL語句之后,檢驗SQLSTATE 的狀態(tài),判斷SQL語句的執(zhí)行結(jié)果。
          ?
          SQLSTATE 的狀態(tài)碼為:
          SQLSTATE='00000' 表示執(zhí)行正確,
          SQLSTATE='02000' 表示沒有滿足要求的元組。

          ?
          說明SQLSTATE主變量示例:
          EXEC SQL BEGIN DECLARE SECTION ;
          char SQLSTATE [6]; // 5個字符和一個空字符
          EXEC SQL END DECLARE SECTION;

          ?
          檢查SQLSTATE主變量的返回值示例:
          EXEC SQL WHENEVER <條件><動作>

          ?
          其中:
          條件:為'NOT FOUND'(02000) 或'SQLERROR'(其他碼)
          動作:為CONTINUE(繼續(xù)執(zhí)行) 或 GO TO<語句標(biāo)號>

            在宿主語言程序中,依據(jù)專用的系統(tǒng)變量的值就可以判斷SQL語句執(zhí)行的正確與否。如果SELECT語句沒有查到記錄,系統(tǒng)就會把一個錯誤代碼寫入相應(yīng)系統(tǒng)變量SQLSTATE中,SQLSTATE='00000'表示執(zhí)行正確。
          ?
          ?




          -The End-

          posted on 2009-05-19 21:55 decode360-3 閱讀(1119) 評論(1)  編輯  收藏 所屬分類: Exam

          評論

          # re: 數(shù)據(jù)庫——嵌入式SQL 2010-05-03 14:30 rftjhg
          曙海嵌入式學(xué)院提供以下課程的培訓(xùn)--中國最大的FPGA,DSP和3G手機通信培訓(xùn)機構(gòu):
          FPGA培訓(xùn),DSP培訓(xùn),MTK培訓(xùn),Android培訓(xùn),Symbian培訓(xùn),iPhone培訓(xùn),單片機培訓(xùn),Candence PCB培訓(xùn),Vxworks培訓(xùn)等。
          網(wǎng)址: http://www.51qianru.cn
          上海總部電話:021-51875830 深圳:0755-61280252 北京:010-51292078  回復(fù)  更多評論
            

          主站蜘蛛池模板: 临朐县| 浙江省| 河西区| 巩留县| 涿鹿县| 大姚县| 舞阳县| 前郭尔| 罗田县| 嘉峪关市| 高邮市| 岳普湖县| 聊城市| 杂多县| 疏附县| 辽阳市| 沂源县| 潢川县| 舞阳县| 武汉市| 陇川县| 嘉峪关市| 元朗区| 峨山| 崇左市| 莒南县| 修水县| 长治县| 新营市| 广东省| 绥棱县| 河北区| 宣威市| 东阳市| 长武县| 淮滨县| 县级市| 宝清县| 象州县| 疏附县| 林口县|