INFORMIX-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
,说明在执行 Select Fetch 查找操作后返回零记录,在 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;  
  …  
  }  
 
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 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)简介
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值