成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

一文詳解嵌入式SQL

瀏覽:111日期:2023-03-06 14:25:51
目錄
  • 嵌入式SQL概述
  • 使用嵌入式SQL的注意事項
    • 區分SQL語句與主語言語句
    • 數據庫工作單元和程序工作單元之間的通信
    • 協調兩種不同的處理方式
  • 嵌入式SQL程序的組成
    • 程序首都
    • 程序體
  • 在嵌入式SQL中使用游標檢索多個元組
    • 游標定義語句
    • 游標打開語句
    • 游標推進語句
    • 游標關閉語句
  • 嵌入式SQL程序實例

    嵌入式SQL概述

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

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

    對于嵌入式SQL, DBMS一般采用預編譯的方法,即由DBMS的預處理程序對源程序進行掃描識別出SQL語句,并把它們轉換成主語言中相應的調用語句,成為主語言源程序,以使主語言編譯程序能夠識別它們,最后由主語言的編譯程序將它編譯成目標代碼,如下圖所示。

    使用嵌入式SQL的注意事項

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

    區分SQL語句與主語言語句

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

    EXEC SQL <SQL語句>;

    數據庫工作單元和程序工作單元之間的通信

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

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

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

    協調兩種不同的處理方式

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

    嵌入式SQL程序的組成

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

    程序首都

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

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

    程序體

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

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

    或者如下:

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

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

    EXEC SQL SET CONNECTION <連接名>;

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

    EXEC SQL DISCONNECT <連接名>;

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

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

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

    游標定義語句

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

    游標打開語句

    EXEC SQL OPEN <游標名>;

    游標推進語句

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

    游標關閉語句

    EXEC SQL CLOSE <游標名>;

    嵌入式SQL程序實例

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

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

    #include<stdio.h>#include"prompt.h"exec sql include sqlca; --sqlca 表示SQL的通信區, 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"; ?-- 連接數據庫? ? --另注:因為隱私保密原因? ? --在此數據庫密碼使用了xxxxxx代替? ? --數據庫服務器路徑使用了url代替? ? --實際使用時根據自己需求替換? ? 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; -- 根據輸入的客戶id 找到名字和折扣? ? ? ? exec sql commit work;-- 提交? ? ? ? printf("customer"s name is %s and discount?? ? ? ? is %.1f\n",cust_name, cust_discnt);? ? ? ? continue; -- 接著循環,再輸入客戶id?? ? notfound:printf("can"t find customer %s, continuing\n", cust_id);}? ? exec sql commit release; -- 斷開數據庫的連接? ? return 0;? ? report_error: ?-- 前面報錯的執行? ? ? ? print_dberror();--打印報錯? ? ? ? exec sql rollback release; -- 斷開連接? ? ? ? return 1;}

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

    標簽: MsSQL
    相關文章:
    成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
    99国产麻豆精品| 国产精品青草久久| 国产精品亚洲专一区二区三区| 国产一区二区三区在线观看免费 | 成人免费视频视频在线观看免费 | 岛国精品一区二区| 欧美日韩国产综合一区二区| 日韩网站在线看片你懂的| 国产日韩一级二级三级| 香蕉久久一区二区不卡无毒影院 | 国产精品美女久久久久久久久| 波多野结衣91| 国产视频在线观看一区| 欧美在线视频你懂得| 91精品国产乱| 亚洲精品一二三| 蜜臀av性久久久久蜜臀av麻豆| 国产精品一区免费视频| 欧美日韩高清在线| 狠狠久久亚洲欧美| 亚洲夜间福利| 欧美日韩亚洲综合| 亚洲欧美日韩一区二区| 国产精品羞羞答答xxdd| 欧美视频一区在线观看| 亚洲欧洲国产日本综合| 国产一级精品在线| 欧美一区二区三区视频| 国产二区国产一区在线观看| 一区二区三区精品国产| 日韩精品一区二区三区老鸭窝| 亚洲一区二区三区四区在线免费观看 | 欧美久久久久久| 日本久久精品电影| 国产精品久久久爽爽爽麻豆色哟哟| 国产一区在线观看麻豆| 欧美一卡二卡在线观看| 97成人超碰视| 中文字幕不卡一区| 国产一区二区91| 日韩免费一区二区三区在线播放| 成人免费毛片嘿嘿连载视频| 欧美精品一区男女天堂| 日韩av不卡在线观看| 97久久久精品综合88久久| 久久久久高清精品| 国产综合久久久久久鬼色| 欧美视频你懂的| 国产精品一级二级三级| 久久久久99精品国产片| 伊人影院久久| 欧美精品一区二区三区久久久| 不卡一区在线观看| 欧美视频中文一区二区三区在线观看 | 久久亚洲一区| 国产精品三级av| 在线观看欧美亚洲| 天天av天天翘天天综合网 | 在线观看的日韩av| 午夜精品福利久久久| 欧美精品在欧美一区二区少妇| 亚洲成人在线观看视频| 欧美亚洲综合网| 成人小视频在线观看| 最新成人av在线| 欧美99久久| 精品美女一区二区| 国模无码大尺度一区二区三区| 日韩欧美一区电影| 国产一区二区在线观看免费播放| 日韩视频永久免费| 色综合天天综合网天天狠天天| 91精品国产综合久久精品图片| 麻豆91免费观看| 精品国产伦一区二区三区观看方式 | 久久色在线视频| 国产不卡一区视频| 91精品国产aⅴ一区二区| 欧美精品二区| 亚洲激情中文1区| 欧美日韩国产一区| 欧美三级网页| 国产日韩视频一区二区三区| 99精品视频免费全部在线| 国产精品久久久久婷婷二区次| 国产日韩欧美综合精品| 狠狠网亚洲精品| 国产精品久久久久aaaa樱花| 在线观看视频91| 欧美高清一区| 蜜桃视频一区二区三区| 中文字幕欧美激情| 欧美四级电影网| 国内在线观看一区二区三区| 日韩精品欧美精品| 久久综合成人精品亚洲另类欧美| 一区二区三区福利| 成人黄页毛片网站| 图片区日韩欧美亚洲| 久久精品日韩一区二区三区| 91丨porny丨最新| 2020国产精品久久精品美国| 国产伦精品一区| 亚洲成人精品影院| www激情久久| 一本大道综合伊人精品热热| 美女尤物国产一区| 中文字幕亚洲电影| 日韩一区二区免费高清| 国产亚洲午夜| 色综合网色综合| 精品一区二区三区不卡| 欧美一区二区三区免费在线看| 亚洲精品无人区| 午夜伊人狠狠久久| 国产亚洲综合av| 欧美日韩亚洲综合在线| 夜夜嗨一区二区| 99精品视频在线观看免费| 免费一级片91| 欧美一区二区三区电影| aa亚洲婷婷| 99久久免费国产| 久久精品99国产精品| 欧美另类一区二区三区| 精品91免费| 成人网男人的天堂| 久久91精品国产91久久小草| 一区二区欧美国产| 欧美日韩一区小说| 国产一级一区二区| 国产精品草草| 国产sm精品调教视频网站| 日本三级韩国三级欧美三级| 亚洲精品网站在线观看| 国产丝袜美腿一区二区三区| 91精品久久久久久久99蜜桃| 色婷婷综合五月| 亚洲精品一二| 91浏览器打开| 成人午夜在线播放| 国产乱子轮精品视频| 日韩av电影天堂| 亚洲专区一二三| 亚洲情趣在线观看| 中文字幕成人在线观看| 久久久天堂av| 欧美第一区第二区| 欧美剧情片在线观看| 在线视频一区二区三| 久久riav二区三区| 国产成人一区在线| 日本不卡不码高清免费观看| 亚洲综合在线电影| 国产精品麻豆欧美日韩ww| 欧美精品一区二区在线播放| 日韩一区二区三区av| 欧美日韩一级二级| 欧洲另类一二三四区| 久久久久久久欧美精品| 国产精品推荐精品| 亚洲美女一区| 亚洲精品麻豆| 99re热精品| 国产精品久久亚洲7777| 亚洲精品日韩精品| 亚洲精品在线免费| 亚洲大胆av| 一区二区在线视频观看| 欧美chengren| 欧美一区二区三区在线免费观看| 99vv1com这只有精品| 99久久伊人久久99| aaa亚洲精品| 99久久国产综合精品麻豆| 菠萝蜜视频在线观看一区| av午夜精品一区二区三区| 成人动漫视频在线| 99re亚洲国产精品| 欧美阿v一级看视频| 欧美不卡在线| 欧美午夜a级限制福利片| 午夜精品视频在线观看一区二区| 97se亚洲国产综合自在线| av不卡免费电影| 色综合一个色综合亚洲| 国产综合色一区二区三区| 国产精品xnxxcom| 亚洲视频免费| 一区二区免费在线视频| 国产一区白浆| 一本高清dvd不卡在线观看| 色偷偷久久一区二区三区| 欧美网站一区二区| 欧美一区二区三区公司| 久久蜜桃香蕉精品一区二区三区| 中文字幕不卡在线观看| 一区二区在线观看不卡| 日韩精品免费专区| 久久精品国产99|