<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  回復  更多評論
      

    主站蜘蛛池模板: 美女免费视频一区二区| 亚洲精品中文字幕无乱码| 亚洲综合国产成人丁香五月激情| 97无码人妻福利免费公开在线视频| 亚洲精品WWW久久久久久| 羞羞漫画小舞被黄漫免费| 国产免费久久精品久久久| 自拍偷自拍亚洲精品偷一| 日韩人妻无码免费视频一区二区三区 | 亚洲精品电影天堂网| 久久精品中文字幕免费| 亚洲女初尝黑人巨高清| A片在线免费观看| 久久精品7亚洲午夜a| 精品一卡2卡三卡4卡免费视频| 亚洲欧洲无码AV电影在线观看 | 波多野结衣视频在线免费观看| 婷婷亚洲综合五月天小说在线| 免费国产小视频在线观看| 免费无码婬片aaa直播表情| 亚洲无码精品浪潮| 爱丫爱丫影院在线观看免费| 亚洲av鲁丝一区二区三区| 亚洲免费视频观看| 一本色道久久88—综合亚洲精品| 免费的一级黄色片| 一区二区3区免费视频| 久久久久无码精品亚洲日韩 | 亚洲成a人片在线观看国产| 韩国免费A级毛片久久| 久久亚洲AV成人无码电影| 青青青免费国产在线视频小草| 亚洲第一第二第三第四第五第六| 亚洲精品无码久久久| 久久这里只精品热免费99| 亚洲制服丝袜精品久久| 免费人成在线观看视频播放| 久草免费手机视频| 亚洲精品无码专区久久| 久久亚洲国产成人影院网站| 四虎最新永久免费视频|