很多来自网络,自己整理了一下。
☆概念
利用高级语言的过程性结构来弥补SQL语言实现复杂应用方面的不足。
嵌入SQL的高级语言称为主语言或宿主语言。
在混合编程中,SQL语句负责操作数据库,高级语言语句负责控制程序流程。
预编译方法:由DBMS的预处理程序对源程序扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译器能识别它,最后由主语言编译器将整个源程序编译成目标码。
嵌入SQL的高级语言称为主语言或宿主语言。
在混合编程中,SQL语句负责操作数据库,高级语言语句负责控制程序流程。
预编译方法:由DBMS的预处理程序对源程序扫描,识别出SQL语句,把它们转换成主语言调用语句,以使主语言编译器能识别它,最后由主语言编译器将整个源程序编译成目标码。
☆嵌入式SQL的一般形式
所有的嵌入式SQL语句都必须加前缀EXEC SQL
在C语言中: EXEC SQL <SQL语句>
例如:EXEC SQL DROP TABLE Student;
在C语言中: EXEC SQL <SQL语句>
例如:EXEC SQL DROP TABLE Student;
☆嵌入式SQL与主语言的通信
向主语言传递SQL语句执行状态信息,使语言能够据此信息控制程序流程,用SQL通信区(SQLCA【SQL Communication Area】)实现。
主语言向SQL语句提供参数,主要用主变量(Host Variable)实现;
将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor)实现。
主语言向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个字符
每次执行完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个字符