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);
}