好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

ESQLC培训教材.doc

13页
  • 卖家[上传人]:cl****1
  • 文档编号:419097052
  • 上传时间:2022-12-12
  • 文档格式:DOC
  • 文档大小:102.04KB
  • / 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 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语句中常量可以出现的任何位置,SQL语句中的这种变量称为宿主变量INFORMIX-ESQL/C程序通过宿主变量在C语句和SQL语句中传递数据一般情况下,在宿主变量前加“:”如:EXEC SQL update book set book_price = :fNewPrice;在定义宿主变量时也需要使用如下声明语句,EXEC SQL BEGIN DECLARE SECTION; int iNumber;char name[10];struct student { int no; char name[10]; } stu;EXEC SQL END DECLARE SECTION;另外,宿主变量可以像C语言变量一样用在C语言表达式中,如:EXEC SQL BEGIN DECLARE SECTION; char dbname[11];EXEC SQL END DECLARE SECTION;gets( dbname, 80 );EXEC SQL database :dbname;1.3. 头文件INFORMIX-ESQL/C提供了许多头文件,其中最常用的是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-ESQL/C程序中执行一条SQL语句时,数据库服务器会返回几种信息,反映SQL语句的执行情况,包括:l 该SQL语句的完成状况;l 有关性能的信息;l 有关可能发生或已经发生的事情的警告这些返回信息传送到一个称为sqlca的结构中,该结构定义在sqlca.h中:struct sqlca_s{ long sqlcode; char sqlerrm[72]; char sqlerrp[8]; long sqlerrd[6]; struct sqlcaw_s{ char sqlwarn0; char sqlwarn1; char sqlwarn2; char sqlwarn3; char sqlwarn4; char sqlwarn5; char sqlwarn6; char sqlwarn7; } sqlwarn;} sqlca;上述sqlca结构中的信息反映了INFORMIX-ESQL/C语句执行后的情况:成功或异常,其中异常情况包括三种:(1) 执行成功,但没有找到记录;(2) 执行成功,但出现警告信息;(3) 执行结果失败。

      可通过sqlcode来检测SQL语句的执行结果,其含义如下:l sqlcode=0时,说明语句执行成功;l sqlcode=100,说明在执行Select或Fetch查找操作后返回零记录,在sqlca.h中将宏SQLNOTFOUND定义为100;l sqlcode<0时,说明SQL语句执行后有错误发生以下是一个简单的ESQL/C程序:#include EXEC SQL include sqlca;main(){EXEC SQL BEGIN DECLARE SECTION; char fname[15]; char lname[20];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 bookname where lname>"C"; EXEC SQL open democursor; for( ; ; ) { EXEC SQL fetch democursor; if ( sqlca.sqlcode ) break; printf( "%s%s\n", 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后缀才能进行转换转换后的结果存在与源文件同名但后缀为“.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。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.