嵌入式SQL语言之动态SQL
一、动态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