日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

一文詳解嵌入式SQL

瀏覽:153日期:2023-03-06 14:25:51
目錄
  • 嵌入式SQL概述
  • 使用嵌入式SQL的注意事項
    • 區(qū)分SQL語句與主語言語句
    • 數(shù)據(jù)庫工作單元和程序工作單元之間的通信
    • 協(xié)調(diào)兩種不同的處理方式
  • 嵌入式SQL程序的組成
    • 程序首都
    • 程序體
  • 在嵌入式SQL中使用游標檢索多個元組
    • 游標定義語句
    • 游標打開語句
    • 游標推進語句
    • 游標關閉語句
  • 嵌入式SQL程序?qū)嵗?/li>

    嵌入式SQL概述

    嵌入式SQL(Embedded SQL) 是應用系統(tǒng)使用編程方式來訪問和管理數(shù)據(jù)庫中數(shù)據(jù)的主要方式之一。

    SQL語言有兩種使用方式:一種是作為獨立語言,以交互式方式使用,在這種方式下使用的SQL語言是面向集合的描述性語言,是非過程化的。即大多數(shù)語句都是獨立執(zhí)行,與上下文無關的。另一種是嵌入到某種高級語言中使用,利用高級語言的過程化結構來彌補SQL語言在實現(xiàn)諸如流程控制等復雜應用方面的不足。這種方式下使用的SQL語言稱為嵌入式SQL( Embedded SQL),能嵌入SQL的高級語言稱為主語言(Host Language)或宿主語言。目前SQL標準中指定的宿主語言主要有C、C++、COBOL、Pascal、Java、PL/I和FORTRAN等。

    對于嵌入式SQL, DBMS一般采用預編譯的方法,即由DBMS的預處理程序?qū)υ闯绦蜻M行掃描識別出SQL語句,并把它們轉(zhuǎn)換成主語言中相應的調(diào)用語句,成為主語言源程序,以使主語言編譯程序能夠識別它們,最后由主語言的編譯程序?qū)⑺幾g成目標代碼,如下圖所示。

    使用嵌入式SQL的注意事項

    把SQL嵌入主語言使用時必須要解決下面幾個問題:

    區(qū)分SQL語句與主語言語句

    主要通過在所有的SQL語句前加前綴EXEC SQL來解決。SQL語句一般以分號(;) 作為結束的標志

    EXEC SQL <SQL語句>;

    數(shù)據(jù)庫工作單元和程序工作單元之間的通信

    嵌入式SQL語句中可以使用主語言的程序變量來輸入或輸出數(shù)據(jù)。把SQL語句中使用的主語言程序變量簡稱為主變量或共享變量。

    主變量根據(jù)其作用的不同,分為輸入主變量和輸出主變量。輸入主變量由應用程序?qū)ζ滟x值,SQL語句引用;輸出主變量由SQL語句對其賦值或設置狀態(tài)信息,返回給應用程序。一個主變量有可能既是輸入主變量又是輸出主變量。在SQL語句中使用主變量時,需在主變量名前加冒號(:)作為標志,以區(qū)別于數(shù)據(jù)庫對象的表名或?qū)傩悦?字段名)。

    SQL語句執(zhí)行后,系統(tǒng)要反饋給應用程序若干信息,這些信息被送到稱為SQL的通信區(qū)的SQLCA中。SQLCA用語句EXEC SQL INCLUDE加以定義。SQLCA 是一個數(shù)據(jù)結構,SQLCA中有一個存放每次執(zhí)行SQL語句后返回代碼的狀態(tài)指示變量SQLCODE。當SQLCODE為零時,表示SQL語句執(zhí)行成功,否則返回一個錯誤代碼(負值)或警告信息(正值)。

    協(xié)調(diào)兩種不同的處理方式

    一般情況下,一個SQL查詢一次可以檢索多個元組(面向集合),而主語言程序通常是"一次一個元組"(面向記錄)處理,為此必須協(xié)調(diào)這兩種不同的處理方式,目前大多使用游標(curor)技術來進行協(xié)調(diào),關于游標的定義和使用方法將在稍后闡述。

    嵌入式SQL程序的組成

    一個帶有嵌入式SQL的程序一般包括兩大部分:程序首都和程序體 。程序首都是由一些說明性語句組成,而程序體則由一些可執(zhí)行語句組成。

    程序首都

    程序首部主要包括的語句有:

    ①聲明段:用于定義主變量。主變量既可以被主語言語句使用,也可以被SQL語句使用,所以也稱共享變量。主變量在EXEC SQL BECIN DECLARE SECTION; 和 EXEC SQL END DECLARE SECTION;之間進行說明。
    ②定義SQL通信區(qū):使用EXEC SQL INCLUDE SQLCA語句定義用于在程序和DBMS之間通信的通信區(qū)。SQLCA中包含兩個通信變量SQLCODE和SQLSTATE。SQLCODE變量是一個整數(shù)變量,當執(zhí)行了數(shù)據(jù)庫命令之后,DBMS會返回一個SQLCODE值。如果這個值是0,則表明DBMS已成功執(zhí)行此語句。如果SQLCODE>0,則表明在該查詢結果中沒有的更多可用的數(shù)據(jù)(記錄)。如果SQLCODE<0,則表明出現(xiàn)了錯誤。SQLSTATE 是一個帶有5 個字符的字符串。如果SQLSTATE的值為00000則表示沒有錯誤或異常;如果是其他值,就表明出現(xiàn)了錯誤或異常。
    ③其他說明性語句

    程序體

    程序體由若干個可執(zhí)行的SQL語句和主語言語句組成。包括建立和關閉與數(shù)據(jù)庫連接的語句。
    建立與一個數(shù)據(jù)庫連接的SQL命令如下:

    EXEC SQL CONNECT TO <服務器名> AS <連接名> AUTHORIZATION <用戶賬戶名和口令>;

    或者如下:

    EXEC SQL CONNECT:<用戶名> identified by:<用戶口令> using:<數(shù)據(jù)庫服務器路徑>;

    一般情況下 ,由于一個用戶或程序可以訪問多個數(shù)據(jù)庫服務器,因此可以建立多個連接,但是任何時刻只能有一個連接是活動的。用戶可以使用<連接名>將當前活動的連接轉(zhuǎn)換為另一個連接,命令如下:

    EXEC SQL SET CONNECTION <連接名>;

    如果不再需要某個連接了,可以使用如下命令終止這個連接:

    EXEC SQL DISCONNECT <連接名>;

    在嵌入式SQL中使用游標檢索多個元組

    一般來說,一個SQL查詢一次可以檢索多個元組,而主語言程序通常是"一次一個元組"處理,可以使用游標協(xié)調(diào)這兩種不同的處理方式。

    與游標相關的SQL語句有下列四個:

    游標定義語句

    EXEC SQL DECLARE <游標名> CURSOR FOR <SELECT語句>;

    游標打開語句

    EXEC SQL OPEN <游標名>;

    游標推進語句

    EXEC SQL FETCH <游標名> INTO [<:主變量名>[,<:主變量名>]...];

    游標關閉語句

    EXEC SQL CLOSE <游標名>;

    嵌入式SQL程序?qū)嵗?/h2>

    下面使用一個案例來對嵌入式SQL進行一個講解,幫助讀者更好地理解嵌入式 SQL的使用,在本案例中使用的宿主語言為C語言。

    案例需求: 現(xiàn)有一數(shù)據(jù)庫,內(nèi)含一張數(shù)據(jù)庫表customers,表中主要存儲了客戶的專屬折扣和id號。每個客戶有且只有一個專屬折扣,即在表中每條數(shù)據(jù)都是唯一的。在C語言中使用嵌入式SQL語句,輸入相關客戶的id號,查找輸出數(shù)據(jù)庫的customer表中相關客戶的信息,數(shù)據(jù)庫用戶名和服務器名均為175_178_184_206。

    #include<stdio.h>#include"prompt.h"exec sql include sqlca; --sqlca 表示SQL的通信區(qū), communication areachar cid_prompt[]="please enter customer id:";--輸入查詢的客戶編號變量cidint main(){? ? exec sql begin declare section; --下面聲明變量? ? char cust_id[5], cust_name[14];--客戶id號和客戶姓名? ? float cust_discnt;--客戶折扣? ? exec sql end declare section;? ? exec sql whenever sqlerror goto report_error;-- 錯誤捕獲? ? exec sql whenever not found goto notfound; ?-- 記錄沒有找到? ? exec sql connect:"customer" identified by:"xxxxxx" using:"url"; ?-- 連接數(shù)據(jù)庫? ? --另注:因為隱私保密原因? ? --在此數(shù)據(jù)庫密碼使用了xxxxxx代替? ? --數(shù)據(jù)庫服務器路徑使用了url代替? ? --實際使用時根據(jù)自己需求替換? ? while((prompt(cid_prompt,1,cust_id,4))>=0){? ? ? ? exec sql select cname,discnt into :cust_name,:cust_discnt? ? ? ? from customers where cid=:cust_id; -- 根據(jù)輸入的客戶id 找到名字和折扣? ? ? ? exec sql commit work;-- 提交? ? ? ? printf("customer"s name is %s and discount?? ? ? ? is %.1f\n",cust_name, cust_discnt);? ? ? ? continue; -- 接著循環(huán),再輸入客戶id?? ? notfound:printf("can"t find customer %s, continuing\n", cust_id);}? ? exec sql commit release; -- 斷開數(shù)據(jù)庫的連接? ? return 0;? ? report_error: ?-- 前面報錯的執(zhí)行? ? ? ? print_dberror();--打印報錯? ? ? ? exec sql rollback release; -- 斷開連接? ? ? ? return 1;}

    到此這篇關于一文詳解嵌入式SQL的文章就介紹到這了,更多相關嵌入式SQL內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持!

    標簽: MsSQL
    相關文章:
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    亚洲毛片一区| 日本在线观看不卡视频| 国产欧美啪啪| 日韩和欧美一区二区三区| 国产亚洲精品自拍| 久久中文字幕二区| 日韩中文影院| 欧美成人基地 | 国产精品视频一区视频二区| 91欧美极品| 国产探花一区| 国产精品尤物| 精品久久久网| 色在线视频观看| 久久久噜噜噜| 女同性一区二区三区人了人一| 欧美日韩精品一本二本三本| 免费精品视频最新在线| 蜜桃av一区二区在线观看| 综合激情一区| 国产日韩一区二区三区在线播放| 麻豆成人av在线| 国产一区三区在线播放| 日韩精品1区| 亚洲国产成人精品女人| 亚洲综合小说| 日韩二区三区在线观看| 麻豆一区二区三区| 人人香蕉久久| 日韩在线一二三区| 国产精品尤物| 久久激情中文| 亚洲精品国产精品粉嫩| 麻豆高清免费国产一区| 日韩国产综合| 一区二区三区四区日韩| 国产日韩一区| 日韩精品永久网址| 日韩一级精品| 久久精品99国产精品日本| 国产成人精选| 国产精品99一区二区| 免费高清在线一区| 国产精品视频一区二区三区| 手机在线电影一区| 国产亚洲高清视频| 国产精品手机在线播放| 日韩精品看片| 亚洲精品进入| 91亚洲一区| 亚洲免费影院| 久久99高清| 亚洲一区成人| 精品午夜久久| 鲁大师影院一区二区三区| 欧美国产视频| 91精品xxx在线观看| 亚洲午夜久久| av资源亚洲| 日本少妇精品亚洲第一区| 日韩毛片视频| 日本v片在线高清不卡在线观看| jizzjizz中国精品麻豆| 四虎成人精品一区二区免费网站| 日韩成人精品一区二区| 蜜桃av一区二区三区电影| 精品国产精品国产偷麻豆| 奶水喷射视频一区| 国产成人免费精品| 日韩欧美中文字幕在线视频| 欧美成人基地 | 欧美激情精品| 国产午夜精品一区二区三区欧美 | 亚洲精品高潮| 日韩欧美一区二区三区在线视频| 亚洲日产国产精品| 另类专区亚洲| 日韩高清电影免费| 久久国产电影| 精品在线网站观看| 综合激情在线| 999国产精品视频| 久久影院资源站| 五月国产精品| 99日韩精品| 久久91导航| 欧美1区2区3| 91欧美极品| 久久99伊人| 久久一区二区三区喷水| 精品久久在线| 欧美日本不卡| 亚洲午夜久久| 久久国产99| 欧美网站在线| 亚洲第一区色| 免费高潮视频95在线观看网站| 国产精品主播在线观看| 亚洲精品乱码日韩| 午夜影院欧美| 精品一区二区三区中文字幕在线| 日韩久久一区| 亚洲一区二区网站| 99久久久久国产精品| 麻豆成全视频免费观看在线看| 国产精品成人国产| 色8久久久久| 天堂av在线一区| 婷婷丁香综合| 99精品综合| 热三久草你在线| 精品视频97| 国产精品啊v在线| 97久久中文字幕| 日韩av三区| 欧美中文一区| 五月亚洲婷婷 | 涩涩涩久久久成人精品| 一级欧洲+日本+国产| 久久精品青草| 精精国产xxxx视频在线野外 | 日本久久精品| 韩国一区二区三区视频| 免费在线亚洲欧美| 国产精品s色| 国产福利一区二区三区在线播放| 日韩精品乱码av一区二区| 亚洲另类视频| 一级欧美视频| 中文字幕一区二区三区在线视频| av不卡免费看| 蘑菇福利视频一区播放| 久久亚洲色图| 日本伊人午夜精品| 日韩av一区二区三区| 日韩激情综合| 国产欧美日韩免费观看| 麻豆视频久久| 国内精品麻豆美女在线播放视频| 精品视频91| 日产精品一区| 久久三级福利| 免费不卡中文字幕在线| 国产一在线精品一区在线观看| 亚洲91精品| 婷婷丁香综合| 免费黄网站欧美| 欧美亚洲人成在线| 久草精品视频| 国产91久久精品一区二区| 日韩一区二区免费看| 亚洲欧美不卡| 欧美日韩a区| 首页国产精品| 国产亚洲在线观看| 日韩激情网站| 久久精品国产99国产| 欧产日产国产精品视频| 国精品一区二区三区| 伊人影院久久| 久热re这里精品视频在线6| 午夜天堂精品久久久久| 免费看久久久| 欧美sss在线视频| 中文字幕免费一区二区| 国产日韩欧美一区在线| yellow在线观看网址| 欧美理论视频| 日韩精品1区2区3区| 精品视频高潮| 尹人成人综合网| 欧美日韩网址| 91精品啪在线观看国产18| 蜜桃视频一区二区三区在线观看| 久久国内精品视频| 亚洲风情在线资源| 综合亚洲自拍| 黑人精品一区| 蜜桃av一区二区三区电影| 久久99免费视频| 狠狠色综合网| 国产精品久久久久久久久久白浆| 亚洲h色精品| 欧美永久精品| 宅男在线一区| 国产精选久久| 亚洲欧美综合| 国产精品伊人| 亚洲欧洲午夜| 久久精品一区二区国产| 日韩精品一区二区三区免费观看| 综合亚洲自拍| 蜜臀久久精品| 亚洲精品免费观看| 亚洲伦乱视频| 久久国际精品| 国产精品普通话对白| 精品视频91| 亚洲毛片视频| 久久一级电影|