<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    數據庫——嵌入式SQL

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

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

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

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

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

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

    2.共享主變量的聲明

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

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

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

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

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

    3.特殊的系統變量
    ?
    ??? 每個數據庫管理系統都提供一個專用的系統變量SQLSTATE,記錄SQL語句執行的狀態。每當執行完一個SQL語句之后,一個代碼便被放入到該系統變量SQLSTATE中,該代碼標識SQL語句執行情況。在程序中,要使用SQLSTATE主變量,也必須要事先說明,并在每一個SQL語句之后,檢驗SQLSTATE 的狀態,判斷SQL語句的執行結果。
    ?
    SQLSTATE 的狀態碼為:
    SQLSTATE='00000' 表示執行正確,
    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(繼續執行) 或 GO TO<語句標號>

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




    -The End-

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

    評論

    # re: 數據庫——嵌入式SQL 2010-05-03 14:30 rftjhg
    曙海嵌入式學院提供以下課程的培訓--中國最大的FPGA,DSP和3G手機通信培訓機構:
    FPGA培訓,DSP培訓,MTK培訓,Android培訓,Symbian培訓,iPhone培訓,單片機培訓,Candence PCB培訓,Vxworks培訓等。
    網址: http://www.51qianru.cn
    上??偛侩娫挘?21-51875830 深圳:0755-61280252 北京:010-51292078  回復  更多評論
      

    主站蜘蛛池模板: 在线精品亚洲一区二区小说| 免费一级毛片不卡在线播放| 亚洲av日韩av激情亚洲| 一级特黄录像视频免费| 亚洲男人av香蕉爽爽爽爽| 久久精品国产亚洲AV天海翼| 国产精品另类激情久久久免费| 亚洲av成人片在线观看| 国产成人精品免费视频大全五级| 日韩欧美亚洲中文乱码| www.亚洲精品| 国产午夜精品理论片免费观看| 国产v亚洲v天堂无码网站| 久久国产免费观看精品| 亚洲区视频在线观看| 大学生一级特黄的免费大片视频 | 日韩视频在线免费观看| 亚洲狠狠色丁香婷婷综合| 国产在线观看免费完整版中文版| 老外毛片免费视频播放| 国产亚洲精品拍拍拍拍拍| 99免费在线观看视频| 亚洲熟女综合色一区二区三区| 又粗又黄又猛又爽大片免费| 中美日韩在线网免费毛片视频| 亚洲国产成人精品无码区在线观看 | 久久精品熟女亚洲av麻豆| 亚洲日本一区二区一本一道| 国产一区二区三区免费观看在线| 亚洲婷婷天堂在线综合| 免费国产在线观看老王影院| 99免费在线视频| 在线亚洲高清揄拍自拍一品区| 亚洲国产日韩在线观频| 1a级毛片免费观看| 极品美女一级毛片免费| 亚洲最新中文字幕| 亚洲区小说区图片区| 日本成年免费网站| 国产午夜精品理论片免费观看 | 插鸡网站在线播放免费观看|