
ESQLC培训教材.doc
13页ESQL/C编程培训教材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. 数据查询语句SELECT 52.3. 插入语句INSERT 72.4. 数据修改语句UPDATE 72.5. 数据删除语句DELETE 72.6. PREPARE语句 83. 游标 83.1. 滚动游标 83.1.1. DECLARE 83.1.2. OPEN 83.1.3. FETCH 93.1.4. CLOSE 103.1.5. FREE 103.2. 更新游标 10 版本:1.0.1 - i -ESQL/C编程培训教材1. 概述1.1. SQL语句嵌入方法任何可以交互式输入的SQL语句,例如数据定义语句、数据检索语句、数据控制语句等,都可以嵌入到C程序中。
可以使用两种方法指明SQL语句:一种是在SQL语句之前用“$”作为前缀,如:#include
另外,如果自定义的头文件中包含SQL语句或宿主变量的定义,也必须用同样的方法进行说明,如:EXEC SQL include filename如果源文件在某个路径下,应将其用引号括起来,如:#include
可通过sqlcode来检测SQL语句的执行结果,其含义如下:l sqlcode=0时,说明语句执行成功;l sqlcode=100,说明在执行Select或Fetch查找操作后返回零记录,在sqlca.h中将宏SQLNOTFOUND定义为100;l sqlcode<0时,说明SQL语句执行后有错误发生以下是一个简单的ESQL/C程序:#include
INFORMIX-ESQL/C提供了编译命令esql,用来编译INFORMIX-ESQL/C源代码,这些源代码的名称必须具有.ec后缀才能进行转换转换后的结果存在与源文件同名但后缀为“.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)功能:在当前数据库中建立一张新表格式: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 TableList [WHERE FilterJoin] [GROUP BY ColumnGroupList] [HAVING GroupFilter] [ORDER BY OrderFilter] [INTO TERMTable]说明: INTO子句 检索出来的数据存放的宿主变量 INTO TEMPTable 将检索处理的结果存在至临时表SELECT如果返回多个记录,必须通过游标方式进行处理如果返回单条记录,我们将该语句称为单记录SELECT语句,如果有记录返回,sqlca.sqlcode则被设置为0,如果没有满足条件的记录,sqlca.sqlcode则被设置为SQLNOTFOUND,以下是对单记录SELECT语句操作的示例:EXEC SQL BEGIN DECLARE SECTION;char fj[11],zh[10],xb[20];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;if ( sqlca.slqcode == SQLNOTFOUND ) printf( "没有满足条件的记录\n" );if ( sqlca.sqlcode == 0 ) { printf( "书名:%s\n", fj ); printf( "作者:%s\n", zh ); printf( "出版社:%s\n", xb ); printf( "定价:%.2f\n", 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语句用来改变一个或多个记录中的一个或多个字段的值格式: UPDATE table_name SET {colum。












