版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ESQL/C編程培訓(xùn)教材目 錄編寫說明1目 錄I1. 概述11.1. SQL語句嵌入方法11.2. 宿主變量11.3. 頭文件21.4. 錯(cuò)誤診斷21.5. ESQL/C程序的編譯42. C語言程序中嵌入的SQL語句52.1. 有關(guān)數(shù)據(jù)庫和表的權(quán)限52.1.1. 選擇數(shù)據(jù)庫(DATABASE)52.1.2. 關(guān)閉數(shù)據(jù)庫(CLOSE DATABASE)52.1.3. 創(chuàng)建表(CREATE TABLE)52.1.4. 刪除表(DROP TABLE)52.2. 數(shù)據(jù)查詢語句SELECT52.3. 插入語句INSERT72.4. 數(shù)據(jù)修改語句UPDATE72.5. 數(shù)據(jù)刪除語句DELETE72.6.
2、PREPARE語句83. 游標(biāo)83.1. 滾動(dòng)游標(biāo)83.1.1. DECLARE83.1.2. OPEN83.1.3. FETCH93.1.4. CLOSE103.1.5. FREE103.2. 更新游標(biāo)101. 概述1.1. SQL語句嵌入方法任何可以交互式輸入的SQL語句,例如數(shù)據(jù)定義語句、數(shù)據(jù)檢索語句、數(shù)據(jù)控制語句等,都可以嵌入到C程序中。可以使用兩種方法指明SQL語句:一種是在SQL語句之前用“$”作為前綴,如:#include main()$ database book;$ delete from book where book_num=100;另一種是在SQL語句之前使用ANSI標(biāo)
3、準(zhǔn)的EXEC SQL關(guān)鍵字來標(biāo)識(shí),如:#include main()EXEC SQL database book;EXEC SQL delete from book where book_num=100;1.2. 宿主變量SQL語句中可以有變量,變量可以出現(xiàn)在交互式SQL語句中常量可以出現(xiàn)的任何位置,SQL語句中的這種變量稱為宿主變量。INFORMIX-ESQL/C程序通過宿主變量在C語句和SQL語句中傳遞數(shù)據(jù)。一般情況下,在宿主變量前加“:”。如:EXEC SQL update book set book_price = :fNewPrice;在定義宿主變量時(shí)也需要使用如下聲明語句,EXEC
4、 SQL BEGIN DECLARE SECTION; int iNumber;char name10;struct student int no;char name10; stu;EXEC SQL END DECLARE SECTION;另外,宿主變量可以像C語言變量一樣用在C語言表達(dá)式中,如:EXEC SQL BEGIN DECLARE SECTION; char dbname11;EXEC SQL END DECLARE SECTION;gets( dbname, 80 );EXEC SQL database :dbname;1.3. 頭文件INFORMIX-ESQL/C提供了許多頭文件
5、,其中最常用的是sqlca.h,它用于確定SQL語句的返回值和SQL語句執(zhí)行后的其他信息,在ESQL/C程序中是必須包含的,包含方法是“EXEC SQL include sqlca;”。另外,如果自定義的頭文件中包含SQL語句或宿主變量的定義,也必須用同樣的方法進(jìn)行說明,如:EXEC SQL include filename。如果源文件在某個(gè)路徑下,應(yīng)將其用引號(hào)括起來,如:#include EXEC SQL include sqlca;EXEC SQL include xyz.h;EXEC SQL include /users/test/test.h;1.4. 錯(cuò)誤診斷在INFORMIX-ES
6、QL/C程序中執(zhí)行一條SQL語句時(shí),數(shù)據(jù)庫服務(wù)器會(huì)返回幾種信息,反映SQL語句的執(zhí)行情況,包括:l 該SQL語句的完成狀況;l 有關(guān)性能的信息;l 有關(guān)可能發(fā)生或已經(jīng)發(fā)生的事情的警告。這些返回信息傳送到一個(gè)稱為sqlca的結(jié)構(gòu)中,該結(jié)構(gòu)定義在sqlca.h中:struct sqlca_slongsqlcode;charsqlerrm72;charsqlerrp8;longsqlerrd6;struct sqlcaw_scharsqlwarn0;charsqlwarn1;charsqlwarn2;charsqlwarn3;charsqlwarn4;charsqlwarn5;charsqlwarn
7、6;charsqlwarn7; sqlwarn; sqlca;上述sqlca結(jié)構(gòu)中的信息反映了INFORMIX-ESQL/C語句執(zhí)行后的情況:成功或異常,其中異常情況包括三種:(1) 執(zhí)行成功,但沒有找到記錄;(2) 執(zhí)行成功,但出現(xiàn)警告信息;(3) 執(zhí)行結(jié)果失敗??赏ㄟ^sqlcode來檢測(cè)SQL語句的執(zhí)行結(jié)果,其含義如下:l sqlcode=0時(shí),說明語句執(zhí)行成功;l sqlcode=100,說明在執(zhí)行Select或Fetch查找操作后返回零記錄,在sqlca.h中將宏SQLNOTFOUND定義為100;l sqlcode0時(shí),說明SQL語句執(zhí)行后有錯(cuò)誤發(fā)生以下是一個(gè)簡(jiǎn)單的ESQL/C程序:
8、#include EXEC SQL include sqlca;main()EXEC SQL BEGIN DECLARE SECTION;char fname15;char lname20;EXEC SQL END DECLARE SECTION;int i;printf( This is a ESQL/C Program!n );EXEC SQL database book;EXEC SQL declare democursor cursor forselect fname,lname into :fname, :lnamefrom booknamewhere lnameC;EXEC SQL
9、 open democursor;for( ; ; ) EXEC SQL fetch democursor;if ( sqlca.sqlcode )break;printf( %s%sn, fname, lname );$close demecursor;printf( nProgram Over.n );1.5. ESQL/C程序的編譯用INFORMIX-ESQL/C語句編寫的程序在使用C編譯程序之前必須預(yù)處理,預(yù)處理程序把嵌入的語句轉(zhuǎn)換成C語言程序。INFORMIX-ESQL/C提供了編譯命令esql,用來編譯INFORMIX-ESQL/C源代碼,這些源代碼的名稱必須具有.ec后綴才能進(jìn)行
10、轉(zhuǎn)換。轉(zhuǎn)換后的結(jié)果存在與源文件同名但后綴為“.c”的文件中,然后調(diào)用C編譯器將.c文件轉(zhuǎn)換成以.o為后綴的目標(biāo)文件,最后調(diào)用C語言標(biāo)準(zhǔn)庫和INFORMIX-ESQL/C庫以及用戶自己所鏈接的庫生成可執(zhí)行文件。2. C語言程序中嵌入的SQL語句2.1. 有關(guān)數(shù)據(jù)庫和表的權(quán)限2.1.1. 選擇數(shù)據(jù)庫(DATABASE)功能:DATABASE語句用來選擇已存在的數(shù)據(jù)庫,使其成為當(dāng)前數(shù)據(jù)庫。格式:DATABASE database_name2.1.2. 關(guān)閉數(shù)據(jù)庫(CLOSE DATABASE)功能:關(guān)閉當(dāng)前數(shù)據(jù)庫。格式:CLOSE DATABASE2.1.3. 創(chuàng)建表(CREATE TABLE)功能
11、:在當(dāng)前數(shù)據(jù)庫中建立一張新表。格式:CREATE TEMP TABLE table_name(column_name datatype NOT NULL,)2.1.4. 刪除表(DROP TABLE)功能:刪除一個(gè)已存在的表,以及相關(guān)的索引和數(shù)據(jù)。格式:DROP TABLE table_name2.2. 數(shù)據(jù)查詢語句SELECT數(shù)據(jù)查詢語句SELECT的執(zhí)行結(jié)果有三種情況:l 沒有滿足條件的記錄;l 返回單個(gè)記錄;l 返回多個(gè)記錄。前兩種情況可以使用單個(gè)的SELECT語句,最后一種情況必須使用游標(biāo)進(jìn)行查詢。格式:SELECT 子句 INTO子句FROM TableListWHERE Filte
12、rJoinGROUP BY ColumnGroupListHAVING GroupFilterORDER BY OrderFilterINTO TERMTable說明:INTO子句檢索出來的數(shù)據(jù)存放的宿主變量INTO TEMPTable將檢索處理的結(jié)果存在至臨時(shí)表SELECT如果返回多個(gè)記錄,必須通過游標(biāo)方式進(jìn)行處理。如果返回單條記錄,我們將該語句稱為單記錄SELECT語句,如果有記錄返回,sqlca.sqlcode則被設(shè)置為0,如果沒有滿足條件的記錄,sqlca.sqlcode則被設(shè)置為SQLNOTFOUND,以下是對(duì)單記錄SELECT語句操作的示例:EXEC SQL BEGIN DECLA
13、RE SECTION;char fj11,zh10,xb20;double zhxb;EXEC SQL END DECLARE SECTION;EXEC SQL SELECT fj,zh,xb,zhxb into:fj, :zh, :xb, :zhxbfrom bookwhere book_num=100;if ( sqlca.slqcode = SQLNOTFOUND )printf( 沒有滿足條件的記錄n );if ( sqlca.sqlcode = 0 ) printf( 書名:%sn, fj );printf( 作者:%sn, zh );printf( 出版社:%sn, xb );pr
14、intf( 定價(jià):%.2fn, zhxb );2.3. 插入語句INSERT功能:INSERT語句的主要目的是在表中增加一條或多條新記錄。格式:INSERT INTO table_name(ColumnList)VALUES( valuelist )示例:EXEC SQL INSERT INTO Customer( customer_num, fname, lname, company )VALUES( 0, $Firstname, $Lastname, JOHN CORP );2.4. 數(shù)據(jù)修改語句UPDATE功能:UPDATE語句用來改變一個(gè)或多個(gè)記錄中的一個(gè)或多個(gè)字段的值。格式:UPDA
15、TE table_name SETcolumn_name=expr,|(column_list)=(expr_list)WHERE condition示例:EXEC SQL UPDATE customer SET(fname,lname)=(:Fname,:Lname)WHERE customer_num=:cust;2.5. 數(shù)據(jù)刪除語句DELETE功能:刪除語句DELETE從數(shù)據(jù)庫表中刪除一個(gè)或多個(gè)記錄。格式:DELETE FROM table_nameWHERE condition示例:EXEC SQL DELETE FROM bookWHERE book_num=:booknum;2.
16、6. PREPARE語句功能:PREPARE語句顯示地請(qǐng)求對(duì)SQL語句進(jìn)行語法分析。格式:PREPARE statement_name FROM string_spec示例:EXEC SQL PREPARE Del FROMdelete from book where boo_num=?;if ( SQLCODE 0 ) / SQLCODE=sqlca.sqlcodeprintf( prepare Del Error sqlcode=%dn, SQLCODE );exit( -1 );while( ) EXEC SQL EXECUTE Del Using :book10;3. 游標(biāo)3.1. 滾
17、動(dòng)游標(biāo)3.1.1. DECLAREDECLARE定義一個(gè)游標(biāo),它給游標(biāo)命名并把一個(gè)查詢同一個(gè)游標(biāo)相關(guān)聯(lián)。格式:DECLARE cursor_name CURSOR FOR selectstmt示例:EXEC SQL declare C1 cursor for select xy1,xy2 into :xy1, :xy2 from fj;3.1.2. OPENOPEN語句激活游標(biāo)并開始執(zhí)行相關(guān)聯(lián)的SELECT語句格式:OPEN cursor_name示例:EXEC SQL declare custptr scroll cursor for select * from customer where
18、 zipcode=:zip;EXEC SQL open custptr;3.1.3. FETCHFETCH語句把已打開的游標(biāo)移到一個(gè)新的位置,并把記錄的字段值存放到INTO子句說明的宿主變量中。格式:FETCH position cursor_name INTO HOSTVARLIST說明:對(duì)于一個(gè)滾動(dòng)游標(biāo),該新位置可以是活動(dòng)集中的任意位置。(1) 絕對(duì)位置FIRST取得活動(dòng)集中的第一個(gè)記錄。LAST取得活動(dòng)集中的最后一個(gè)記錄。CURRENT取得當(dāng)前記錄。ABSOLUTE n取得活動(dòng)集的第n個(gè)記錄(2) 相對(duì)位置NEXT取得活動(dòng)集的下一個(gè)記錄。PREVIOUS取得活動(dòng)集的前一個(gè)記錄。RELAT
19、IVE n取得相對(duì)當(dāng)前記錄的第n個(gè)記錄,負(fù)值向前,正值向后數(shù)。示例:EXEC SQL declare custptr scroll cursor for select customer_num, lname, fnamefrom customerwhere zipcode =:zip;EXEC SQL open custptr;EXEC SQL fetch next custptr into :Cnum, :Lname, :Fname;當(dāng)游標(biāo)成功地移動(dòng)到指定位置且在該位置有記錄時(shí),則SQLCODE值為0,如果沒有記錄,則返回SQLNOTFOUND(100)。3.1.4. CLOSECLOSE語
20、句關(guān)閉游標(biāo)。格式:CLOSE cursor_name示例:EXEC SQL declare custptr scroll for select cnum,lname,fnamefrom customerwhere zipcode=:zip;EXEC SQL open custptr;EXEC SQL fetch next custptr into :Cnum,:Lname,:Fname;EXEC SQL close custptr;關(guān)閉游標(biāo)之后,除了OPEN和FREE語句之外,所有其它語句都不能再使用。3.1.5. FREEFREE語句釋放空間和數(shù)據(jù)服務(wù)器中的游標(biāo)資源。格式:FREE cursor_name;示例:EXEC SQL declare custptr curs
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省淮南市潘集區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期中考試英語試題(含答案無聽力原文及音頻)
- 機(jī)動(dòng)三輪車相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 化妝品原料相關(guān)行業(yè)投資方案范本
- 電池材料用化學(xué)品行業(yè)相關(guān)投資計(jì)劃提議
- 離合器分離軸承行業(yè)相關(guān)投資計(jì)劃提議
- 腦梗塞的抗凝治療指南
- 【初中地理】氣溫和降水(第2課時(shí))課件-2024-2025學(xué)年湘教版地理七年級(jí)上冊(cè)
- 重癥護(hù)理小組年終總結(jié)
- 在XXXX年黨建引領(lǐng)企業(yè)高質(zhì)量發(fā)展創(chuàng)新實(shí)踐推進(jìn)會(huì)上的講話范文
- 物聯(lián)網(wǎng)與公安工作
- 2024-2030年中國(guó)安防行業(yè)發(fā)展現(xiàn)狀及競(jìng)爭(zhēng)格局分析報(bào)告權(quán)威版
- ktv營(yíng)銷業(yè)績(jī)提成合同模板
- 英語-重慶市2025年普通高等學(xué)校招生全國(guó)統(tǒng)一考試11月調(diào)研試卷(康德卷)試題和答案
- 招聘筆試題與參考答案(某大型國(guó)企)2024年
- 安徽理工大學(xué)《巖土力學(xué)與工程》2021-2022學(xué)年第一學(xué)期期末試卷
- 有限空間應(yīng)急演練專項(xiàng)方案
- 2024-2030年中國(guó)演藝行業(yè)發(fā)展分析及發(fā)展前景與趨勢(shì)預(yù)測(cè)研究報(bào)告
- 2025年廣東省高中學(xué)業(yè)水平考試春季高考數(shù)學(xué)試題(含答案解析)
- 2023年婦產(chǎn)科主治醫(yī)師考試試題及答案
- 北京市朝陽區(qū)2023-2024學(xué)年高一上學(xué)期期末質(zhì)量檢測(cè)數(shù)學(xué)試題 含解析
- 演講學(xué)智慧樹知到答案2024年同濟(jì)大學(xué)
評(píng)論
0/150
提交評(píng)論