




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 TABLE)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语句,例如数据定义语句、数据检索语句、数据 控制语句等,都可以嵌入到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 语句中传递数据。一般情况下,在宿主变量前加 “:” 。如: 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 语言变量一样用在 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 语句或宿主变量的定义,也必须用同样的方法进行说明,如: 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 语句的完成状况; 有关性能的信息; 有关可能发生或已经发生的事情的警告。 这些返回信息传送到一个称为 sqlca 的结构中,该结构定义在 sqlca.h 中: struct sqlca_s longsqlcode; charsqlerrm72; charsqlerrp8; longsqlerrd6; struct sqlcaw_s charsqlwarn0; charsqlwarn1; charsqlwarn2; charsqlwarn3; charsqlwarn4; charsqlwarn5; charsqlwarn6; 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 中将宏 SQLNOTFOUND 定义为 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 bookname 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 文件转换成以.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 TABLE) 功能:在当前数据库中建立一张新表。 格式: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 语句,最后一种情况必须使用游标进 行查询。 格式: 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 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 = 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( 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) 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_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/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; EXEC 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取得活动集的前一个记录。 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 值为 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 和 FREE 语句之外,所有其它语句都不能再使 用。 3.1.5. FREE FREE 语句释放空间和数据服务器中的游标资源。 格式:FREE cursor_name; 示例: EXEC SQL decl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级下册语文期末复习专项练习
- 爱国旗小学生班会课件
- 高效领域自适应故障诊断模型的研究
- 个性化心理护理对老年心脑血管患者管理效能及满意度提升研究
- 设计绿色现代数智供应链的数据管理体系:“一库两字典”的创新实践
- 爆炸与安全课件
- 城市交通噪声控制技术发展趋势与设计要点研究
- 燃气行业职业病培训课件
- 网络设备与网管系统施工管理策略
- 密码管理师岗位面试问题及答案
- 燃气公司防汛管理制度
- 2025山西华阳新材料科技集团有限公司招聘500人笔试参考题库附带答案详解析集合
- (2025)国家公务员考试时事政治必考试题库及答案
- 10kV供配电系统电气设备改造 投标方案
- JG 121-2000施工升降机齿轮锥鼓形渐进式防坠安全器
- 2025山西大地环境投资控股有限公司校园招聘13人笔试参考题库附带答案详解
- 绿色智能建造概论 课件全套 第1-7章 绪论- 建筑绿色智能运维
- 水库管理制度
- 《防爆安全管理》课件
- 华润守正评标专家考试试题及答案
- 济南市天桥区2025年小学六年级第二学期小升初数学试卷含解析
评论
0/150
提交评论