嵌入式SQL

C语言:EXEC SQL <SQL语句>

  • SQLCA:SQL通信区,向主语言返回执行状态信息
  • 主变量:向SQL提供参数
  • 游标:数据缓冲区,存放执行结果。通过cursor逐一获取结果赋给主变量,返回主语言

将SQL查询结果返回给主语言,通过cursor主变量

EXEC SQL BEGIN DECLARE SECTION;
	... // 主变量定义
EXEC SQL END DECLARE SECTION;

long SQLCODE;
EXEC SQL INCLUDE SQLCODE; // 定义SQL通信区

int main()
{
	...
	EXEC SQL CONNECT TO target[connection name][user name] // 连接
	...
	EXEC SQL DECLARE SX CURSOR FOR  // 定义游标及操作
		SELECT * FROM Stu 	
		WHERE SDept := deptname;    // SQL等号带冒号
	
	EXEC SQL OPEN SX; // 打开游标,指向第一行数据

	for(;;){
		EXEC SQL FETCH SX INTO :HSno, :HSname, :HSsex, :HSage; // 数据放入主变量
		
		// 数据库更新
		EXEC SQL UPDATE Student
				 SET Sage := 16
				 WHERE CURRNET OF SX; // WHERE CURRNET OF 游标, 表示游标指向的那行数据 
	}
	EXEC SQL CLOSE SX;	// 关闭游标
	EXEC SQL COMMIT WORK; // 提交
	EXEC SQL DISCONNECT target; // 断开连接
}

动态SQL

动态SQL用主变量存储SQL语句,而不是静态SQL一样存储数据。

//创建基本表
EXEC SQL BEGIN DECLARE SECTION;
const char* smt = "CREATE TABLE TEST(a int);";
EXEC SQL END DECLARE SECTION;

EXEC SQL EXECUTE IMMEDIATE :smt; // 执行
动态参数

用**?**代替参数。

  1. 声明SQL语句主变量
  2. 准备SQL语句(PREPARE)EXEC SQL PREPARE <语句名> FROM <SQL语句主变量>;
  3. 执行准备好的语句(EXECUTE):EXEC SQL EXECUTE <语句名> [ INTO <主变量表>] [ USING <主变量>]
// 向TEST表中插入元组
/*声明主变量*/
EXEC SQL BEGIN DECLARE SECTION;
const char *smt = "INSERT INTO TEST VALUES(?);"; 	// 用?代替动态参数
EXEC SQL END DECLARE SECTION;

/*准备语句*/
EXEC SQL PREPARE mysmt FROM :smt; 

/*执行语句*/
EXEC SQL EXECUTE mysmt USING 200;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值