C语言采用嵌入式方式操作数据库
概念
在混合编程中,
嵌入SQL的高级语言称为主语言/宿主语言。
SQL语句负责操作数据库,
高级语言语句负责控制程序流程。
预编译方法
由DBMS的预处理程序对源程序扫描,识别出SQL语句,
将它们转换成主语言调用语句,使主语言编译器能识别它,
最后由主语言编译器将整个源程序编译成目标码。
格式
所有嵌入式SQL必须加前缀:EXEC SQL
EXEC SQL <SQL语句>
嵌入式SQL与主语言的通信
1:向主语言传递SQL语句执行状态信息【状态信息】,使语言能据此信息控制程序流程,用SQL通信区(SQLCA)实现。
2:主语言向SQL语句提供参数,主要用主变量实现。
3:将SQL语句查询数据库的结果交给主语言进一步处理,主要用主变量和游标实现。
SQL通信区
存放执行SQL语句后返回代码的变量SQLCODE
SUCCESS、错误代码
主变量
- 主变量可以是输入主变量,也可以是输出主变量。
- 主变量定义的位置必须在:
EXEC SQL BEGIN DECLARE SECTION;
主变量(int i=0;......)
EXEC SQL END DECLARE SECTION;
EXEC SQL BEGIN DECLARE SECTION; struct MWIPLOTSTS_N_TAG MWIPLOTSTS_N; EXEC SQL END DECLARE SECTION;
- SQL语句中的主变量名必须加冒号,SQL语句外不用
游标
【定义--打开--推进--关闭--释放游标】
//定义游标
EXEC SQL DECLARE DBU_MWIPLOTSTS_CUR_1 CURSOR FOR SELECT LOT_ID, FACTORY, MAT_ID, FROM MWIPLOTSTS WHERE FACTORY = :MWIPLOTSTS_N.FACTORY
//打开游标
EXEC SQL OPEN DBU_MWIPLOTSTS_CUR_1;
//推进游标
EXEC SQL FETCH DBU_MWIPLOTSTS_CUR_1 INTO :MWIPLOTSTS_N.LOT_ID, :MWIPLOTSTS_N.LOT_DESC, :MWIPLOTSTS_N.FACTORY
//关闭游标
EXEC SQL CLOSE DBU_MWIPLOTSTS_CUR_1;
//释放游标
EXEC SQL FREE DBU_MWIPLOTSTS_CUR_1;
事务
【开始--提交--回滚】
EXEC SQL BEGIN WORK; EXEC SQL COMMIT WORK; EXEC SQL ROLLBACK WORK;