嵌入式SQL语言之动态SQL

本文介绍了动态SQL的概念和作用,对比了静态SQL的特点。通过示例展示了如何动态构造SQL语句,并详细阐述了动态SQL的执行方式,包括立即执行和Prepare-Execute-Using语句。此外,探讨了数据字典与SQLDA,以及在X/Open标准中的系统目录。最后,讨论了ODBC和JDBC在数据库访问中的应用,提供了基于这两种接口的思维模式和示例代码。
摘要由CSDN通过智能技术生成

一、动态SQL的概念和作用

静态SQL特点
SQL语句在程序中已经按要求写好,只需要把一些参数通过变量(高级语言程序语句中不带冒号)传送给嵌入式SQL语句即可(嵌入式SQL语句中带冒号)。

动态SQL特点
SQL语句可以在程序中动态构造,形成一个字符串,如上例sqltext,然后再交给DBMS执行,交给DBMS执行时仍旧可以传递变量。

二、SQL语句的动态构造-示例1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序构造

#include <stdio.h>
#include "prompt.h”
char Vcname[];
char Vcity[];
double range_from, range_to;
int Cname_chose, City_chose, Discnt_chose;
Cname_chose = 0; City_chose = 0; Discnt_chose = 0;
int sql_sign = 0;
char continue_sign[];
// 程序变量声明

// 定义
exec sql include sqlca;
exec sql begin declare section;
char user_name[20],user_pwd[20];
char sqltext[]="delete from customers where ";
exec sql end declare section;

int main()(
	exec sql whenever sqlerror goto report_error; // SQL错误捕获语句

	strcpy(user_name, "poneilsql");
	strcpy(user_pwd, "XXXX");
	exec sql connect :user_name identified
	by :user_pwd; // SQL Connect

	while(1) {
   
		memset(Vcname, '\0,20);
		memset(Vcity,'\0,20); // 初始化
		if(GetCname(Vcname))
			Cname_chose =1; // 获取Cname值
		if (GetCity(Vcity))
			City_chose =1; // 获取City值
		if (GetDiscntRange(&range_from, &range_to))
			Discnt_chose=1; // 获取Discnt区间值
			
		if (Cname_chose){
   
		// 如果选择了Cname,构造sqltext
			sql_sign = 1;
			s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值