/***************************************************************************************************************
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;
}