c语言 exec sql编程,C语言采用嵌入式方式操作数据库exec_sql.doc

Exec sql/c【嵌入SQL】

概念:

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

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

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

预编译方法

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

☆嵌入式SQL的一般形式

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

在C语言中: EXEC SQL

例如:EXEC SQL DROP TABLE Student;

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

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

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

3:将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变量,以下为其架构并介绍其内容与用途:

SQLCA结构

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< 0I/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时产生的警告讯息

为一个含有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 B

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值