ESQLC培训教材_第1页
ESQLC培训教材_第2页
ESQLC培训教材_第3页
ESQLC培训教材_第4页
ESQLC培训教材_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ESQL/C编程培训教材目 录编写说明1目 录I1. 概述11.1. SQL语句嵌入方法11.2. 宿主变量11.3. 头文件21.4. 错误诊断21.5. ESQL/C程序的编译42. C语言程序中嵌入的SQL语句52.1. 有关数据库和表的权限52.1.1. 选择数据库(DATABASE)52.1.2. 关闭数据库(CLOSE DATABASE)52.1.3. 创建表(CREATE TABLE)52.1.4. 删除表(DROP TABLE)52.2. 数据查询语句SELECT52.3. 插入语句INSERT72.4. 数据修改语句UPDATE72.5. 数据删除语句DELETE72.6.

2、PREPARE语句83. 游标83.1. 滚动游标83.1.1. DECLARE83.1.2. OPEN83.1.3. FETCH93.1.4. CLOSE103.1.5. FREE103.2. 更新游标101. 概述1.1. SQL语句嵌入方法任何可以交互式输入的SQL语句,例如数据定义语句、数据检索语句、数据控制语句等,都可以嵌入到C程序中。可以使用两种方法指明SQL语句:一种是在SQL语句之前用“$”作为前缀,如:#include main()$ database book;$ delete from book where book_num=100;另一种是在SQL语句之前使用ANSI标

3、准的EXEC SQL关键字来标识,如:#include main()EXEC SQL database book;EXEC SQL delete from book where book_num=100;1.2. 宿主变量SQL语句中可以有变量,变量可以出现在交互式SQL语句中常量可以出现的任何位置,SQL语句中的这种变量称为宿主变量。INFORMIX-ESQL/C程序通过宿主变量在C语句和SQL语句中传递数据。一般情况下,在宿主变量前加“:”。如:EXEC SQL update book set book_price = :fNewPrice;在定义宿主变量时也需要使用如下声明语句,EXEC

4、 SQL BEGIN DECLARE SECTION; int iNumber;char name10;struct student int no;char name10; stu;EXEC SQL END DECLARE SECTION;另外,宿主变量可以像C语言变量一样用在C语言表达式中,如: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语句执行后的其他信息,在ESQL/C程序中是必须包含的,包含方法是“EXEC SQL include sqlca;”。另外,如果自定义的头文件中包含SQL语句或宿主变量的定义,也必须用同样的方法进行说明,如:EXEC SQL include filename。如果源文件在某个路径下,应将其用引号括起来,如:#include EXEC SQL include sqlca;EXEC SQL include xyz.h;EXEC SQL include /users/test/test.h;1.4. 错误诊断在INFORMIX-ES

6、QL/C程序中执行一条SQL语句时,数据库服务器会返回几种信息,反映SQL语句的执行情况,包括:l 该SQL语句的完成状况;l 有关性能的信息;l 有关可能发生或已经发生的事情的警告。这些返回信息传送到一个称为sqlca的结构中,该结构定义在sqlca.h中:struct sqlca_slongsqlcode;charsqlerrm72;charsqlerrp8;longsqlerrd6;struct sqlcaw_scharsqlwarn0;charsqlwarn1;charsqlwarn2;charsqlwarn3;charsqlwarn4;charsqlwarn5;charsqlwarn

7、6;charsqlwarn7; sqlwarn; sqlca;上述sqlca结构中的信息反映了INFORMIX-ESQL/C语句执行后的情况:成功或异常,其中异常情况包括三种:(1) 执行成功,但没有找到记录;(2) 执行成功,但出现警告信息;(3) 执行结果失败。可通过sqlcode来检测SQL语句的执行结果,其含义如下:l sqlcode=0时,说明语句执行成功;l sqlcode=100,说明在执行Select或Fetch查找操作后返回零记录,在sqlca.h中将宏SQLNOTFOUND定义为100;l sqlcode0时,说明SQL语句执行后有错误发生以下是一个简单的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编译程序之前必须预处理,预处理程序把嵌入的语句转换成C语言程序。INFORMIX-ESQL/C提供了编译命令esql,用来编译INFORMIX-ESQL/C源代码,这些源代码的名称必须具有.ec后缀才能进行

10、转换。转换后的结果存在与源文件同名但后缀为“.c”的文件中,然后调用C编译器将.c文件转换成以.o为后缀的目标文件,最后调用C语言标准库和INFORMIX-ESQL/C库以及用户自己所链接的库生成可执行文件。2. C语言程序中嵌入的SQL语句2.1. 有关数据库和表的权限2.1.1. 选择数据库(DATABASE)功能:DATABASE语句用来选择已存在的数据库,使其成为当前数据库。格式:DATABASE database_name2.1.2. 关闭数据库(CLOSE DATABASE)功能:关闭当前数据库。格式:CLOSE DATABASE2.1.3. 创建表(CREATE TABLE)功能

11、:在当前数据库中建立一张新表。格式:CREATE TEMP TABLE table_name(column_name datatype NOT NULL,)2.1.4. 删除表(DROP TABLE)功能:删除一个已存在的表,以及相关的索引和数据。格式:DROP TABLE table_name2.2. 数据查询语句SELECT数据查询语句SELECT的执行结果有三种情况:l 没有满足条件的记录;l 返回单个记录;l 返回多个记录。前两种情况可以使用单个的SELECT语句,最后一种情况必须使用游标进行查询。格式:SELECT 子句 INTO子句FROM TableListWHERE Filte

12、rJoinGROUP BY ColumnGroupListHAVING GroupFilterORDER BY OrderFilterINTO TERMTable说明:INTO子句检索出来的数据存放的宿主变量INTO TEMPTable将检索处理的结果存在至临时表SELECT如果返回多个记录,必须通过游标方式进行处理。如果返回单条记录,我们将该语句称为单记录SELECT语句,如果有记录返回,sqlca.sqlcode则被设置为0,如果没有满足条件的记录,sqlca.sqlcode则被设置为SQLNOTFOUND,以下是对单记录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( 定价:%.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. 数据修改语句UPDATE功能:UPDATE语句用来改变一个或多个记录中的一个或多个字段的值。格式: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. 数据删除语句DELETE功能:删除语句DELETE从数据库表中删除一个或多个记录。格式:DELETE FROM table_nameWHERE condition示例:EXEC SQL DELETE FROM bookWHERE book_num=:booknum;2.

16、6. PREPARE语句功能:PREPARE语句显示地请求对SQL语句进行语法分析。格式: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. 游标3.1. 滚

17、动游标3.1.1. DECLAREDECLARE定义一个游标,它给游标命名并把一个查询同一个游标相关联。格式:DECLARE cursor_name CURSOR FOR selectstmt示例:EXEC SQL declare C1 cursor for select xy1,xy2 into :xy1, :xy2 from fj;3.1.2. OPENOPEN语句激活游标并开始执行相关联的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语句把已打开的游标移到一个新的位置,并把记录的字段值存放到INTO子句说明的宿主变量中。格式:FETCH position cursor_name INTO HOSTVARLIST说明:对于一个滚动游标,该新位置可以是活动集中的任意位置。(1) 绝对位置FIRST取得活动集中的第一个记录。LAST取得活动集中的最后一个记录。CURRENT取得当前记录。ABSOLUTE n取得活动集的第n个记录(2) 相对位置NEXT取得活动集的下一个记录。PREVIOUS取得活动集的前一个记录。RELAT

19、IVE n取得相对当前记录的第n个记录,负值向前,正值向后数。示例: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;当游标成功地移动到指定位置且在该位置有记录时,则SQLCODE值为0,如果没有记录,则返回SQLNOTFOUND(100)。3.1.4. CLOSECLOSE语

20、句关闭游标。格式: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;关闭游标之后,除了OPEN和FREE语句之外,所有其它语句都不能再使用。3.1.5. FREEFREE语句释放空间和数据服务器中的游标资源。格式:FREE cursor_name;示例:EXEC SQL declare custptr curs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论