结构体数组实例

/***************************************************************************************************************
esql*C 使用结构体数组实例
***************************************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>

void error()
{
	/* 对错误情况不予处理,以防止死循环*/
	EXEC SQL WHENEVER SQLERROR CONTINUE;
	/* 输出错误信息*/
	printf("EXPECTION:%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
	EXEC SQL ROLLBACK WORK;
	exit(1);
}

int main()
{
	int n;
	long SQLCODE;
	/*声明宿主数组变量*/
	EXEC SQL BEGIN DECLARE SECTION;
	struct stu_struct
	{			
		int id;				
		char name[10];				
		int age;				
	}stu_in[5];
			
	struct stu_struct_out
	{
		int id;
		char name[10];
		int age;
	}stu_out[5];

	int i=0;
	EXEC SQL END DECLARE SECTION;

	EXEC SQL WHENEVER SQLERROR do error();
	EXEC SQL CONNECT TO osrdb@localhost USER sysdba USING szoscar55;

	EXEC SQL WHENEVER SQLERROR CONTINUE;
	/*建表之前先删除存在的表*/
	EXEC SQL DROP TABLE Student;
	EXEC SQL WHENEVER SQLERROR do error();
	//创建表 
	printf("正在创建表Student( id INTEGER PRIMARY KEY, name VARCHAR(10), age INTEGER )\n");
	EXEC SQL CREATE TABLE Student( id INTEGER PRIMARY KEY, name VARCHAR(10), age INTEGER );
	if(SQLCODE == 0)
	{
		printf("表Student创建成功\n");
	}
	//初始化数据
	for(i=0;i<5;i++)
	{
		stu_in[i].id = i;
		stu_in[i].age = i*10;
		sprintf(stu_in[i].name,"lulu#%d",i);	
	}

	printf("正在执行插入数据操作..........\n");
	EXEC SQL INSERT INTO Student VALUES (:stu_in);
	printf("插入了%d行数据!\n",sqlca.sqlerrd[2]); 
	EXEC SQL SELECT * INTO :stu_out FROM Student;
	printf("查询到%d行数据!\n",sqlca.sqlerrd[2]);
	//输出查询信息
	for(i=0;i<sqlca.sqlerrd[2];i++)
	{
		printf("id:%d,name:%s,age:%d\n",stu_out[i].id,stu_out[i].name,stu_out[i].age);	
	}
	
	//删除表
	EXEC SQL DROP TABLE Student;
	EXEC SQL COMMIT WORK;
	EXEC SQL DISCONNECT;
	return 0;
}