版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、esql/c 编编程程培培训训教教材材esql/c 编程培训教材版本:1.0.1 - i -目目 录录编写说明编写说明.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.
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. 更新游标.10esql/c 编程培训教材版本:1.0.1 - 1 -1. 概述概述1.1. sql语句嵌入方法语句嵌入方法任何可以交互式输入的sql语句,例如数据定义语句、数据检索语句、数据控制语句等,都可以嵌入到c程序中。可以
3、使用两种方法指明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 语句中的这种变量称为宿主变量
4、。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;exec sql end declare section;另外,宿主变量可以像 c 语言
5、变量一样用在 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 程序中是必须包含的,包含方法是“exec sql include sqlca;” 。另外,如果自定义的头文件中包含 sql 语句或宿主变
6、量的定义,也必须用同样的方法进行说明,如: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 语句时,数据库服务器会返回几种信息,反映 sql 语句的执行情况,包括: 该 sql 语句的完成状况; 有关性能的信息; 有关可能发生或
7、已经发生的事情的警告。这些返回信息传送到一个称为 sqlca 的结构中,该结构定义在 sqlca.h 中:struct sqlca_slongsqlcode;charsqlerrm72;charsqlerrp8;longsqlerrd6;struct sqlcaw_scharsqlwarn0;charsqlwarn1;charsqlwarn2;charsqlwarn3;charsqlwarn4;charsqlwarn5;charsqlwarn6;charsqlwarn7; sqlwarn; sqlca;上述 sqlca 结构中的信息反映了 informix-esql/c 语句执行后的情况:成功
8、或异常,其中异常情况包括三种:(1) 执行成功,但没有找到记录;(2) 执行成功,但出现警告信息;(3) 执行结果失败。可通过 sqlcode 来检测 sql 语句的执行结果,其含义如下: sqlcode=0 时,说明语句执行成功;esql/c 编程培训教材版本:1.0.1 - 4 - sqlcode=100,说明在执行 select 或 fetch 查找操作后返回零记录,在 sqlca.h 中将宏 sqlnotfound 定义为 100; sqlcode0 时,说明 sql 语句执行后有错误发生以下是一个简单的 esql/c 程序:1.5. esql/c程序的编译程序的编译用 informi
9、x-esql/c 语句编写的程序在使用 c 编译程序之前必须预处理,预处理程序把嵌入的语句转换成 c 语言程序。informix-esql/c 提供了编译命令 esql,用来编译 informix-esql/c#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
10、sql declare democursor cursor forselect fname,lname into :fname, :lnamefrom booknamewhere lnamec;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 -源代码,这些源代码的名称必须
11、具有.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)功能
12、:关闭当前数据库。格式:close database2.1.3. 创建表(创建表(create table)功能:在当前数据库中建立一张新表。格式:create temp table table_name(column_name datatype not null,)2.1.4. 删除表(删除表(drop table)功能:删除一个已存在的表,以及相关的索引和数据。格式:drop table table_nameesql/c 编程培训教材版本:1.0.1 - 6 -2.2. 数据查询语句数据查询语句select数据查询语句 select 的执行结果有三种情况: 没有满足条件的记录; 返回单个记
13、录; 返回多个记录。前两种情况可以使用单个的 select 语句,最后一种情况必须使用游标进行查询。格式: select 子句 into 子句from tablelistwhere filterjoingroup by columngrouplisthaving groupfilterorder by orderfilterinto termtable说明: into 子句检索出来的数据存放的宿主变量into temptable将检索处理的结果存在至临时表select 如果返回多个记录,必须通过游标方式进行处理。如果返回单条记录,我们将该语句称为单记录 select 语句,如果有记录返回,sq
14、lca.sqlcode则被设置为 0,如果没有满足条件的记录,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, :zhxbfrom bookwhere book_num=100;esql/c 编程培训教材版本:1.0.1 - 7 -if ( sqlca.slq
15、code = sqlnotfound )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 customer( cus
16、tomer_num, fname, lname, company )values( 0, $firstname, $lastname, john corp );2.4. 数据修改语句数据修改语句update功能:update 语句用来改变一个或多个记录中的一个或多个字段的值。格式: update table_name setcolumn_name=expr,|(column_list)=(expr_list)where condition示例:exec sql update customer set(fname,lname)=(:fname,:lname)where customer_num=
17、:cust;esql/c 编程培训教材版本:1.0.1 - 8 -2.5. 数据删除语句数据删除语句delete功能:删除语句 delete 从数据库表中删除一个或多个记录。格式: delete from table_namewhere condition示例:exec sql delete from bookwhere book_num=:booknum;2.6. prepare语句语句功能:prepare 语句显示地请求对 sql 语句进行语法分析。格式: prepare statement_name from string_spec示例:exec sql prepare del from
18、delete 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. 滚动游标滚动游标3.1.1. declaredeclare 定义一个游标,它给游标命名并把一个查询同一个游标相关联。esql/c 编程培训教材版本:1.0.1 - 9 -格式:declare cursor_name cur
19、sor 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 zipcode=:zip;exec sql open custptr;3.1.3. fetchfetch 语句把已打开的游标移到一个新的位置,并把
20、记录的字段值存放到into 子句说明的宿主变量中。格式: fetch position cursor_name into hostvarlist说明:对于一个滚动游标,该新位置可以是活动集中的任意位置。(1) 绝对位置first取得活动集中的第一个记录。last取得活动集中的最后一个记录。current取得当前记录。absolute n 取得活动集的第 n 个记录(2) 相对位置next取得活动集的下一个记录。previous取得活动集的前一个记录。relative n取得相对当前记录的第 n 个记录,负值向前,正值向后数。示例:esql/c 编程培训教材版本:1.0.1 - 10 -exec
21、 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 语句关闭游标。格式: 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;示例:ex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江警官职业学院《品牌形象专项设计一》2023-2024学年第一学期期末试卷
- 中国民用航空飞行学院《现代交换技术》2023-2024学年第一学期期末试卷
- 郑州旅游职业学院《当代资本主义》2023-2024学年第一学期期末试卷
- 小学预算编制收支审批制度
- 浙江传媒学院《应用程序设计实验》2023-2024学年第一学期期末试卷
- 漳州城市职业学院《长跑》2023-2024学年第一学期期末试卷
- 深度学习在元数据分析中的探索
- 双十二品牌提升策略模板
- 专业基础-房地产经纪人《专业基础》点睛提分卷3
- 2024-2025学年江苏省无锡市江阴市八年级(上)期末数学试卷
- 广东省惠州市2024-2025学年高一上学期期末考试英语试题(含答案)
- 医院骨科2025年带教计划(2篇)
- 2024-2025学年北京市东城区高一上学期期末考试数学试卷(含答案)
- 环境保护应急管理制度执行细则
- 2024-2030年中国通航飞行服务站(FSS)行业发展模式规划分析报告
- 机械制造企业风险分级管控手册
- 地系梁工程施工方案
- 藏文基础-教你轻轻松松学藏语(西藏大学)知到智慧树章节答案
- 2024电子商务平台用户隐私保护协议3篇
- 安徽省芜湖市2023-2024学年高一上学期期末考试 英语 含答案
- 医学教程 常见体表肿瘤与肿块课件
评论
0/150
提交评论