宿主数组变量实例¶
例 5-1
/*****************************************************************************
esql*C 使用宿主数组实例 *
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
void error()
{
/* 对错误情况不予处理,以防止死循环*/
EXEC SQL WHENEVER SQLERROR CONTINUE;
/* 输出错误信息*/
sqlprint();
EXEC SQL ROLLBACK WORK;
exit(1);
}
int main()
{
int n;
long SQLCODE;
/*声明宿主数组变量*/
EXEC SQL BEGIN DECLARE SECTION;
char hnum[10][4];
char hname[10][21];
char hcity[10][16];
int hgrade[10];
int ind_city[10];
EXEC SQL END DECLARE SECTION;
for (n = 0; n < 10; n++)
{
hnum[n][0] = '\0';
hname[n][0] = '\0';
hcity[n][0] = '\0';
hgrade[n] = -1;
ind_city[n] = -1;
}
EXEC SQL WHENEVER SQLERROR DO error();
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL CONNECT TO osrdb@localhost USER
sysdba USING szoscar55;
EXEC SQL WHENEVER SQLERROR CONTINUE;
/*建表之前先删除已经存在的表*/
EXEC SQL DROP TABLE employee;
EXEC SQL WHENEVER SQLERROR do error();
/* 创建表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('1','张三',10,'北京');
EXEC SQL INSERT INTO employee VALUES('2','李四',15,'天津');
EXEC SQL INSERT INTO employee VALUES('3','王五',8,'杭州');
EXEC SQL INSERT INTO employee VALUES('4','宋六',20,'上海');
EXEC SQL INSERT INTO employee VALUES('5','陆七',1,'南京');
/*执行下面的SELECT语句有一个前提条件,表employee中的元组数不能大于10*/
EXEC SQL SELECT empnum,empname, grade, city INTO :hnum, :hname, :hgrade, :hcity:ind_city \
FROM employee;
for (n = 0; n < 10; n++)
{
if (hnum[n][0] == '\0')
{
break;
}
printf("%s, %s, %s,%d\n", hnum[n], hname[n], hcity[n], hgrade[n]);
}
EXEC SQL DROP TABLE employee;
EXEC SQL COMMIT WORK;
EXEC SQL DISCONNECT;
exit(0);
not_found:
printf("表中没有数据了.\n");
EXEC SQL DROP TABLE employee;
EXEC SQL ROLLBACK WORK;
EXEC SQL DISCONNECT;
exit(1);
}