INFORMIX-ESQL/C编程

INFORMIX-ESQL/C入门
本文介绍INFORMIX-ESQL/C的基本概念,包括SQL语句的嵌入方法、宿主变量的使用、头文件的作用及错误诊断。同时,提供了一个简单的ESQL/C程序示例,并解释了如何进行ESQL/C程序的编译。
  关于INFORMIX-ESQL/C编程,有很多东西可以学习。我贴一点基本资料在这里吧——  
   
  1.1     SQL
语句嵌入方法  
 
任何可以交互式输入的SQL语句,例如数据定义语句、数据检索语句、数据控制语句等,都可以嵌入到C程序中。  
 
可以使用两种方法指明SQL语句:  
 
一种是在SQL语句之前用“$”作为前缀,如:  
  #include   <stdio.h>  
  main()  
  {  
  $   database   book;  
  $   delete   from   book   where   book_num=100;  
  …  
  }  
 
另一种是在SQL语句之前使用ANSI标准的EXEC   SQL关键字来标识,如:  
  #include   <stdio.h>  
  main()  
  {  
  EXEC   SQL   database   book;  
  EXEC   SQL   delete   from   book   where   book_num=100;  
  …  
  }  
   
  1.2    
宿主变量  
  SQL
语句中可以有变量,变量可以出现在交互式SQL语句中常量可以出现的任何位置,SQL语句中的这种变量称为宿主变量。INFORMIX-ESQL/C程序通过宿主变量在C语句和SQL语句中传递数据。一般情况下,在宿主变量前加“$”符来标识。如:  
  $   update   book   set   book_price   =   $fNewPrice;  
 
在定义宿主变量时也需要在定义语句前用“$”符来标识,如:  
  $   int   iNumber;  
  $   char   name[10];  
  $   struct   student   {  
  int   no;  
  char   name[10];  
      }   stu;  
   
 
另外,宿主变量可以像C语言变量一样用在C语言表达式中,如:  
  $   char   dbname[11];  
  gets(   dbname,   80   );  
  $   database   $dbname;  
   
  1.3    
头文件  
  INFORMIX-ESQL/C
提供了许多头文件,其中最常用的是sqlca.h,它用于确定SQL语句的返回值和SQL语句执行后的其他信息,在ESQL/C程序中是必须包含的,包含方法是“$include   sqlca”。另外,如果自定义的头文件中包含SQL语句或宿主变量的定义,也必须用同样的方法进行说明,如:$include   filename。如果源文件在某个路径下,应将其用引号括起来,如:  
  #include   <stdio.h>  
  $include   sqlca;  
  $include   xyz.h;  
  $include   "/users/test/test.h";   
   
1.4     错误诊断  
 
INFORMIX-ESQL/C程序中执行一条SQL语句时,数据库服务器会返回几种信息,反映SQL语句的执行情况,包括:  
  __
SQL语句的完成状况;  
  __
有关性能的信息;  
  __
有关可能发生或已经发生的事情的警告。  
 
这些返回信息传送到一个称为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语句的执行结果,其含义如下:  
  __sqlcode=0
时,说明语句执行成功;  
  __sqlcode=100
,说明在执行SelectFetch查找操作后返回零记录,在sqlca.h中将宏SQLNOTFOUND定义为100  
  __sqlcode<0
时,说明SQL语句执行后有错误发生  
   
 
以下是一个简单的ESQL/C程序:  
  #include   <stdio.h>  
  $include   sqlca;  
   
  main()  
  {  
  $char   fname[15];  
  $char   lname[20];  
  int   i;  
   
  printf(   "This   is   a   ESQL/C   Program!/n"   );  
   
  $database   book;  
  $declare   democursor   cursor   for  
  select   fname,lname   into   $fname,   $lname  
  from   bookname  
  where   lname>"C";  
  $open   democursor;  
  for(   ;   ;   )   {  
  $fetch   democursor;  
  if   (   sqlca.sqlcode==100   )  
  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库以及用户自己所链接的库生成可执行文件。  
   
    C语言程序中嵌入的SQL语句  
  2.1    
有关数据库和表的权限  
  2.1.1    
选择数据库(DATABASE  
 
功能:DATABASE语句用来选择已存在的数据库,使其成为当前数据库。  
 
格式:DATABASE   database_name  
   
  2.2    
关闭数据库(CLOSE   DATABASE  
 
功能:关闭当前数据库。  
 
格式:CLOSE   DATABASE  
   
  2.2.1    
创建表(CREATE   TABLE  
 
功能:在当前数据库中建立一张新表。  
 
格式:CREATE   [TEMP]   TABLE   table_name  
  (column_name   datatype   [NOT   NULL],…)  
   
  2.2.2    
删除表(DROP   TABLE  
 
功能:删除一个已存在的表,以及相关的索引和数据。  
 
格式:DROP   TABLE   table_name  
   
  2.3    
数据查询语句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语句操作的示例:  
  $char   fj[11],zh[10],xb[20];  
  $double   zhxb;  
  $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.4    
插入语句INSERT  
 
功能:INSERT语句的主要目的是在表中增加一条或多条新记录。  
 
格式: INSERT   INTO   table_name  
  [(ColumnList)]  
  VALUES(   valuelist   )  
 
示例:  
  $INSERT   INTO   Customer(   customer_num,   fname,   lname,   company   )  
  VALUES(   0,   $Firstname,   $Lastname,   "JOHN   CORP"   );  
   
  2.5    
数据修改语句UPDATE  
 
功能:UPDATE语句用来改变一个或多个记录中的一个或多个字段的值。  
 
格式: UPDATE   table_name   SET  
  {column_name=expr[,…]|(column_list)=(expr_list)}  
  [WHERE   condition]  
 
示例:  
  $UPDATE   customer   SET  
  (fname,lname)=($Fname,$Lname)  
  WHERE   customer_num=$cust;  
   
  2.6    
数据删除语句DELETE  
 
功能:删除语句DELETE从数据库表中删除一个或多个记录。  
 
格式: DELETE   FROM   table_name  
  [WHERE   {condition}]  
 
示例:  
  $DELETE   FROM   book  
  WHERE   book_num=$booknum;  
   
  2.7     PREPARE
语句  
 
功能:PREPARE语句显示地请求对SQL语句进行语法分析。  
 
格式: PREPARE   statement_name   FROM   string_spec  
 
示例:  
  $PREPARE   Del   FROM  
  "delete   from   book   where   boo_num=?";  
  if   (   SQLCODE   <   0   )   { //   SQLCODE=sqlca.sqlcode  
  printf(   "prepare   Del   Error   sqlcode=%d/n",   SQLCODE   );  
  exit(   -1   );  
  }  
  while(   …   )   {  
  …  
  $EXECUTE   Del   Using   $book10;  
  …  
  }  
 
一、 ESQL/C资料(完全版)一 第一节 什么是嵌入SQL语言?3 1.1 嵌入SQL程序的组成元素3 1.2 什么是静态SQL和动态SQL?4 1.3 什么是SQLCA?4 1.4 什么是SQLDA?5 第二节 SYBASE SQL SERVER嵌入式SQL语言5 2.1 一个嵌入SQL语言的简单例子5 2.2 嵌入SQL的处理过程6 2.3 嵌入SQL语句总览7 2.3.1 宿主变量7 2.3.2 连接数据库12 2.3.3 数据的查询和修改13 2.3.4 游标的使用13 2.3.5 SQLCA15 2.3.6 WHENEVER16 2.3.7 批处理18 2.3.8 事务18 2.4动态SQL语句18 2.4 .1 动态修改19 2.4.2 动态游标20 2.4.3 SQLDA23 2.4.4 DESCRIBE语句27 2.5 两个例子程序27 2.5.1 TELECOM程序27 2.5.2 ADHOC程序29 第三节 IBM DB2嵌入SQL语言35 3.1 一个简单示例35 3.2 嵌入SQL语句37 3.2.1宿主变量37 3.2.2单行查询39 3.2.3多行查询39 3.2.4插入、删除和修改操作40 3.2.5 SQLCA43 3.2.6事务45 3.3 DB2的嵌入SQL程序处理过程46 3.4 DB2的动态SQL嵌入语句53 3.4.1 基本方法53 3.4.2 动态游标55 3.4.3 SQLDA55 第四节 ORACLE数据库的嵌入SQL语言66 4.1 基本的SQL语句66 4.1.1宿主变量和指示符66 4.1.2 查询68 4.1.3 修改数据68 4.1.4 游标68 4.2 嵌入PL/SQL71 4.3 动态SQL语句72 4.3.1 ORACLE动态SQL语句的一些特点72 4.3.2 使用动态SQL的四种方法72 4.3.3 SQLDA75 第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言96 5.4.1 SQLDA97 第六节MICROSOFT SQL SERVER7嵌入式SQL语言105 6.1 一个嵌入SQL语言的简单例子105 6.2 嵌入SQL的处理过程106 6.3 嵌入SQL语句112 6.3.1 声明嵌入SQL语句中使用的C变量112 6.3.2 连接数据库115 6.3.3 数据的查询和修改115 6.3.4 游标的使用116 6.3.5 SQLCA117 6.3.6 WHENEVER118 6.4动态SQL语句119 6.4 .1 动态修改119 6.4.2 动态游标120 6.4.3 SQLDA122 6.4.4 DESCRIBE语句130 6.5 API130 第六章 嵌入式SQL(E-SQL)简介
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值