PREPARE和EXECUTE的例子¶
下面是一个使用PREPARE和EXECUTE的例子,源程序如下:
/********************************************************
* esql*C 使用EXECUTE和PREPARE的实例*
********************************************************/
#include <stdio.h>
#include <stdlib.h>
int main()
{
/*声明宿主数组变量*/
EXEC SQL BEGIN DECLARE SECTION;
char command[80];
char hnum[4];
char hname[21];
int hgrade;
char hcity[16];
EXEC SQL END DECLARE SECTION;
long SQLCODE;
/* 对错误情况进行处理 */
EXEC SQL WHENEVER SQLERROR CONTINUE;
/*获取动态命令*/
sprintf(command,"UPDATE employee SET grade = grade +1 WHERE empnum = ?");
/* 连接神通数据库 */
EXEC SQL CONNECT TO osrdb@localhost
USER sysdba USING szoscar55;
/*建表之前先删除已经存在的表*/
EXEC SQL DROP TABLE employee;
/* 创建表employee */
EXEC SQL CREATE TABLE employee(
empnum CHARACTER(3) PRIMARY KEY,
empname CHAR(20),
grade DECIMAL(4,0),
city VARCHAR(15));
if (SQLCODE == 0)
{
printf("表employee成功创建!\n");
}
EXEC SQL INSERT INTO employee VALUES('E7','艾黎',10,'北京');
if(SQLCODE == 0)
{
printf("插入数据成功!");
EXEC SQL select * into :hnum, :hname, :hgrade, :hcity from employee;
printf("插入后的数据是empnum: %s, empname: %s, grade: %d, city: %s\n",hnum,hname,hgrade,hcity);
}
/* prepare */
sprintf(hnum,"E7");
EXEC SQL PREPARE dstmt FROM :command;
EXEC SQL EXECUTE dstmt USING :hnum;
if (SQLCODE == 0)
{
printf("成功地把员工%s的级别提升一级!\n", hnum);
EXEC SQL select * into :hnum, :hname, :hgrade, :hcity from employee;
printf("插入后的数据是empnum: %s, empname: %s, grade: %d, city: %s\n",hnum,hname,hgrade,hcity);
}
EXEC SQL DROP TABLE employee;
EXEC SQL COMMIT WORK;
EXEC SQL DISCONNECT;
exit(0);
}