ESQLC培训教材.doc

上传人:来看看 文档编号:3444138 上传时间:2019-08-26 格式:DOC 页数:13 大小:102.03KB
返回 下载 相关 举报
ESQLC培训教材.doc_第1页
第1页 / 共13页
ESQLC培训教材.doc_第2页
第2页 / 共13页
ESQLC培训教材.doc_第3页
第3页 / 共13页
ESQLC培训教材.doc_第4页
第4页 / 共13页
ESQLC培训教材.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《ESQLC培训教材.doc》由会员分享,可在线阅读,更多相关《ESQLC培训教材.doc(13页珍藏版)》请在三一文库上搜索。

1、ESQL/C 编编程程培培训训教教材材 ESQL/C 编程培训教材 版本:1.0.1 - i - 目目 录录 编写说明编写说明1 目目 录录I 1. 概述概述.1 1.1. SQL语句嵌入方法.1 1.2. 宿主变量1 1.3. 头文件2 1.4. 错误诊断2 1.5. ESQL/C程序的编译.4 2. C 语言程序中嵌入的语言程序中嵌入的 SQL 语句语句5 2.1. 有关数据库和表的权限5 2.1.1. 选择数据库(DATABASE).5 2.1.2. 关闭数据库(CLOSE DATABASE).5 2.1.3. 创建表(CREATE TABLE).5 2.1.4. 删除表(DROP TA

2、BLE)5 2.2. 数据查询语句SELECT.5 2.3. 插入语句INSERT7 2.4. 数据修改语句UPDATE7 2.5. 数据删除语句DELETE.7 2.6. PREPARE语句.8 3. 游标游标.8 3.1. 滚动游标8 3.1.1. DECLARE.8 3.1.2. OPEN.8 3.1.3. FETCH 9 3.1.4. CLOSE 10 3.1.5. FREE .10 3.2. 更新游标10 ESQL/C 编程培训教材 版本:1.0.1 - 1 - 1. 概述概述 1.1. SQL语句嵌入方法语句嵌入方法 任何可以交互式输入的SQL语句,例如数据定义语句、数据检索语句、

3、数据 控制语句等,都可以嵌入到C程序中。 可以使用两种方法指明SQL语句: 一种是在SQL语句之前用“$”作为前缀,如: #include main() $ database book; $ delete from book where book_num=100; 另一种是在SQL语句之前使用ANSI标准的EXEC SQL关键字来标识,如: #include main() EXEC SQL database book; EXEC SQL delete from book where book_num=100; 1.2. 宿主变量宿主变量 SQL 语句中可以有变量,变量可以出现在交互式 SQL

4、语句中常量可以出现 的任何位置,SQL 语句中的这种变量称为宿主变量。INFORMIX-ESQL/C 程序 通过宿主变量在 C 语句和 SQL 语句中传递数据。一般情况下,在宿主变量前加 “:” 。如: ESQL/C 编程培训教材 版本:1.0.1 - 2 - EXEC SQL update book set book_price = :fNewPrice; 在定义宿主变量时也需要使用如下声明语句, EXEC SQL BEGIN DECLARE SECTION; int iNumber; char name10; struct student int no; char name10; stu;

5、 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 提供了许多头文件,其中最常用的是 sqlca.h,它用于 确定 SQL 语句的返回值和 SQL 语句执行后的其他信息,在 ESQL/C 程序中是 必须包含的,包含方法

6、是“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“; ESQL/C 编程培训教材 版本:1.0.1 - 3 - 1.4. 错误诊断错误诊断 在 INFORMIX-ESQL/C 程序中执行一条 SQL 语句

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

8、warn6; charsqlwarn7; sqlwarn; sqlca; 上述 sqlca 结构中的信息反映了 INFORMIX-ESQL/C 语句执行后的情况: 成功或异常,其中异常情况包括三种: (1) 执行成功,但没有找到记录; (2) 执行成功,但出现警告信息; (3) 执行结果失败。 可通过 sqlcode 来检测 SQL 语句的执行结果,其含义如下: sqlcode=0 时,说明语句执行成功; ESQL/C 编程培训教材 版本:1.0.1 - 4 - sqlcode=100,说明在执行 Select 或 Fetch 查找操作后返回零记 录,在 sqlca.h 中将宏 SQLNOTF

9、OUND 定义为 100; sqlcode 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 for select fname,lname into :fname, :lname from boo

10、kname where lname“C“; EXEC SQL open democursor; for( ; ; ) EXEC SQL fetch democursor; if ( sqlca.sqlcode ) break; printf( “%s%sn“, fname, lname ); $close demecursor; printf( “nProgram Over.n“ ); ESQL/C 编程培训教材 版本:1.0.1 - 5 - 源代码,这些源代码的名称必须具有.ec 后缀才能进行转换。转换后的结果存在 与源文件同名但后缀为“.c”的文件中,然后调用 C 编译器将.c 文件转换成

11、以.o 为后缀的目标文件,最后调用 C 语言标准库和 INFORMIX-ESQL/C 库以及用户 自己所链接的库生成可执行文件。 2. C语言程序中嵌入的语言程序中嵌入的SQL语句语句 2.1. 有关数据库和表的权限有关数据库和表的权限 2.1.1. 选择数据库(选择数据库(DATABASE) 功能:DATABASE 语句用来选择已存在的数据库,使其成为当前数据 库。 格式:DATABASE database_name 2.1.2. 关闭数据库(关闭数据库(CLOSE DATABASE) 功能:关闭当前数据库。 格式:CLOSE DATABASE 2.1.3. 创建表(创建表(CREATE T

12、ABLE) 功能:在当前数据库中建立一张新表。 格式:CREATE TEMP TABLE table_name (column_name datatype NOT NULL,) 2.1.4. 删除表(删除表(DROP TABLE) 功能:删除一个已存在的表,以及相关的索引和数据。 格式:DROP TABLE table_name ESQL/C 编程培训教材 版本:1.0.1 - 6 - 2.2. 数据查询语句数据查询语句SELECT 数据查询语句 SELECT 的执行结果有三种情况: 没有满足条件的记录; 返回单个记录; 返回多个记录。 前两种情况可以使用单个的 SELECT 语句,最后一种情

13、况必须使用游标进 行查询。 格式: SELECT 子句 INTO 子句 FROM TableList WHERE FilterJoin GROUP BY ColumnGroupList HAVING GroupFilter ORDER BY OrderFilter INTO TERMTable 说明: INTO 子句检索出来的数据存放的宿主变量 INTO TEMPTable将检索处理的结果存在至临时表 SELECT 如果返回多个记录,必须通过游标方式进行处理。如果返回单条 记录,我们将该语句称为单记录 SELECT 语句,如果有记录返回,sqlca.sqlcode 则被设置为 0,如果没有满足

14、条件的记录,sqlca.sqlcode 则被设置为 SQLNOTFOUND,以下是对单记录 SELECT 语句操作的示例: EXEC SQL BEGIN DECLARE SECTION; char fj11,zh10,xb20; double zhxb; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT fj,zh,xb,zhxb into :fj, :zh, :xb, :zhxb from book where book_num=100; ESQL/C 编程培训教材 版本:1.0.1 - 7 - if ( sqlca.slqcode = SQLNOT

15、FOUND ) printf( “没有满足条件的记录n“ ); if ( sqlca.sqlcode = 0 ) printf( “书名:%sn“, fj ); printf( “作者:%sn“, zh ); printf( “出版社:%sn“, xb ); printf( “定价:%.2fn“, zhxb ); 2.3. 插入语句插入语句INSERT 功能:INSERT 语句的主要目的是在表中增加一条或多条新记录。 格式: INSERT INTO table_name (ColumnList) VALUES( valuelist ) 示例: EXEC SQL INSERT INTO Cust

16、omer( customer_num, fname, lname, company ) VALUES( 0, $Firstname, $Lastname, “JOHN CORP“ ); 2.4. 数据修改语句数据修改语句UPDATE 功能:UPDATE 语句用来改变一个或多个记录中的一个或多个字段的值。 格式: UPDATE table_name SET column_name=expr,|(column_list)=(expr_list) WHERE condition 示例: EXEC SQL UPDATE customer SET (fname,lname)=(:Fname,:Lname

17、) WHERE customer_num=:cust; ESQL/C 编程培训教材 版本:1.0.1 - 8 - 2.5. 数据删除语句数据删除语句DELETE 功能:删除语句 DELETE 从数据库表中删除一个或多个记录。 格式: DELETE FROM table_name WHERE condition 示例: EXEC SQL DELETE FROM book WHERE book_num=:booknum; 2.6. PREPARE语句语句 功能:PREPARE 语句显示地请求对 SQL 语句进行语法分析。 格式: PREPARE statement_name FROM string

18、_spec 示例: EXEC SQL PREPARE Del FROM “delete from book where boo_num=?“; if ( SQLCODE 0 ) / SQLCODE=sqlca.sqlcode printf( “prepare Del Error sqlcode=%dn“, SQLCODE ); exit( -1 ); while( ) EXEC SQL EXECUTE Del Using :book10; 3. 游标游标 3.1. 滚动游标滚动游标 3.1.1. DECLARE DECLARE 定义一个游标,它给游标命名并把一个查询同一个游标相关联。 ESQL

19、/C 编程培训教材 版本:1.0.1 - 9 - 格式:DECLARE cursor_name CURSOR FOR selectstmt 示例: EXEC SQL declare C1 cursor for select xy1,xy2 into :xy1, :xy2 from fj; 3.1.2. OPEN OPEN 语句激活游标并开始执行相关联的 SELECT 语句 格式: OPEN cursor_name 示例: EXEC SQL declare custptr scroll cursor for select * from customer where zipcode=:zip; E

20、XEC SQL open custptr; 3.1.3. FETCH FETCH 语句把已打开的游标移到一个新的位置,并把记录的字段值存放到 INTO 子句说明的宿主变量中。 格式: FETCH position cursor_name INTO HOSTVARLIST 说明: 对于一个滚动游标,该新位置可以是活动集中的任意位置。 (1) 绝对位置 FIRST取得活动集中的第一个记录。 LAST取得活动集中的最后一个记录。 CURRENT取得当前记录。 ABSOLUTE n 取得活动集的第 n 个记录 (2) 相对位置 NEXT取得活动集的下一个记录。 PREVIOUS取得活动集的前一个记录。

21、 RELATIVE n取得相对当前记录的第 n 个记录,负值向前,正值 向后数。 示例: ESQL/C 编程培训教材 版本:1.0.1 - 10 - EXEC SQL declare custptr scroll cursor for select customer_num, lname, fname from customer where zipcode =:zip; EXEC SQL open custptr; EXEC SQL fetch next custptr into :Cnum, :Lname, :Fname; 当游标成功地移动到指定位置且在该位置有记录时,则 SQLCODE 值

22、为 0, 如果没有记录,则返回 SQLNOTFOUND(100) 。 3.1.4. CLOSE CLOSE 语句关闭游标。 格式: CLOSE cursor_name 示例: EXEC SQL declare custptr scroll for select cnum,lname,fname from customer where zipcode=:zip; EXEC SQL open custptr; EXEC SQL fetch next custptr into :Cnum,:Lname,:Fname; EXEC SQL close custptr; 关闭游标之后,除了 OPEN 和

23、FREE 语句之外,所有其它语句都不能再使 用。 3.1.5. FREE FREE 语句释放空间和数据服务器中的游标资源。 格式:FREE cursor_name; 示例: EXEC SQL declare custptr cursor for select cnum, lname, fname from customer ESQL/C 编程培训教材 版本:1.0.1 - 11 - where zipcode=:zip; EXEC SQL open custptr; EXEC SQL fetch next custptr into :Cnum, :Lname, :Fname; EXEC SQL

24、 close custptr; EXEC SQL free custptr; 3.2. 更新游标更新游标 更新游标只能查看下一条记录,主要在进行修改和删除操作时使用。 格式: DECLARE cursor_name CURSOR FOR select_statement FOR UPDATE OF column_list 示例: EXEC SQL declare mycurs cursor for select manu_code, manu_name from manufact for update; EXEC SQL open mycurs; for( ; ; ) EXEC SQL fetch mycurs into :mfcode, :mfname; if ( user_input = UPDATE ) EXEC SQL update manufact set ( manu_code, manu_name ) = ( :mfcode, :mfname ) where current of mycurs; if ( user_input = DELETE ) EXEC SQL delete from manufact where current of mycurs;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育


经营许可证编号:宁ICP备18001539号-1