Exec sql/c

您所在的位置:网站首页 嵌入式sql语言以什么结束 Exec sql/c

Exec sql/c

2024-07-14 15:42| 来源: 网络整理| 查看: 265

Exec sql/c

利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。

   嵌入SQL的高级语言称为主语言或宿主语言。

   在混合编程中,SQL语句负责操作数据库,高级语言语句负责控制程序流程。

  预编译方法:由DBMS的预处理程序对源程序扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译器能识别它,最后由主语言编译器将整个源程序编译成目标码。

    ☆嵌入式SQL的一般形式

   所有的嵌入式SQL语句都必须加前缀EXEC SQL

   在C语言中:  EXEC SQL

   例如:EXEC SQL DROP TABLE Student;

 

    ☆嵌入式SQL与主语言的通信

   向主语言传递SQL语句执行状态信息,使语言能够据此信息控制程序流程,用SQL通信区(SQLCA【SQL Communication Area】)实现。

   主语言向SQL语句提供参数,主要用主变量(Host Variable)实现;

   将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor)实现。

    ☆SQL通信区

   SQLCA中有一个存放每次执行SQL语句后返回代码的变量SQLCODE。

   每次执行完SQL语句后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理,如果SQLCODE等于预定的常量SUCCESS,则表示SQL语句成功,否则在SQLCODE中存放错误代码。

   SQLCA(SQL Communication Access) 系由系统提供之系统记录架构,作为back end与 front end 之间沟通之用,当发生 I/O 状态时,系统会记录该状态于SQLCA 中,front end 即可依据其其内容得知 I/O 运作是否成功,再决定往后执行的步骤。SQLCA 为系统定义之 GLOBAL变量,以下为其架构并介绍其内容与用途: 

DEFINE SQLCA RECORD 

           SQLCODE     INTEGER, 

           SQLERRM     CHAR(71), 

           SQLERRP     CHAR(8), 

           SQLERRD     ARRAY[6] OF INTEGER, 

           SQLAWARN    CHAR(8) 

END RECORD

 

   .SQLCODE :表示 I/O 的结果 

0    表示 I/O 成功 

100 表示 NOTFOUND 

< 0 表示 I/O 失败

 

   .SQLERRM :保留未用

   .SQLERRP :保留未用

 

   .SQLERRD :为一个含有6个INTEGER数组 

   SQLERRD[1]:保留未用 

   SQLERRD[2]:新增时 SERIAL 字段所传回之值 

   SQLERRD[3]:处理资料的笔数 

   SQLERRD[4]:查询时预估的 CPU COST 

   SQLERRD[5]:SQL指令之错误位移 

   SQLERRD[6]:最后一个 ROWID 值

 

   .SQLAWARN :为一个含有8个字符的字符串,以记录I/O时产生的警告讯息。若正确无误,则相对应之字符设定为空白,否则会被设定为"W"。 

   SQLAWARN[1]:若第2至第8字符中任意一个被设成"W",则此字符亦为"W",否则为空白。 

   SQLAWARN[2]:若资料太长而被截掉时,会被设成 "W"。 

   SQLAWARN[3]:若 aggregate function(如 SUM,AVG,MAX,MIN) 处理时遇到 NULL 值,则会被设成"W"。 

   SQLAWARN[4]:若查询时,若欲查询的字段数目和 INTO 之变量数目不合时,会被设成 "W"。 

   SQLAWARN[5]:如转换 float 成 integer 时,则会被设成 "W"。 

   SQLAWARN[6]:保留未用 

   SQLAWARN[7]:保留未用 

   SQLAWARN[8]:保留未用 

    ☆主变量

   一个主变量既可是输入主变量也可是输出主变量。

   主变量必须在SQL语句EXEC SQL BEGIN DECLARE SECTION与EXEC SQL END DECLARE SECTION之间进行说明。

   例如:

   EXEC SQL BEGIN DECLARE SECTION;

   int     i=0;

   EXEC SQL END DECLARE SECTION;

   SQL语句的主变量名前要加冒号作为标志。

   在SQL语句之外,主变量直接引用,不须加冒号。

    ☆使用游标查询

  EXEC SQL DECLARE cur CURSOR FOR select name,sex from student where no like :no;//定义游标

  EXEC SQL OPEN cur;//打开游标

  for(;;){

    EXEC SQL fetch cur into :name,:sex;//推进游标

    if(sqlca.sqlcode==100)//没有满足条件的数据

        break;

    //操作数据

   }

  EXEC SQL close cur;//关闭游标

  EXEC SQL free   cur;//释放游标

    ☆使用事务

   事务的三个常用操作:开始事务(BEGIN WORK),提交事务(COMMIT WORK),回滚(ROLLBACK WORK),

   例如:

  EXEC   SQL  BEGIN WORK;

   ……//数据库操作

  if(sqlca.sqlcode



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3