结构体示例

/***************************************************************************************************************
esql*C 使用宿主结构体实例
***************************************************************************************************************/
#include <stdio.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_data
	{
		int id;		
		char name[20];		
		int age;		
	};
	struct stu_data stu_data_in,stu_data_out;	  
	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 CHAR(20),age INTEGER)");
	EXEC SQL CREATE TABLE Student(id INTEGER PRIMARY KEY,name CHAR(20),age INTEGER);
    if(SQLCODE == 0)
	{
		printf("创建表Student成功!\n");
	}
	//插入数据	
	printf("正在向表Student中插入数据......... \n");
	stu_data_in.id=1;
	strcpy(stu_data_in.name,"Xiao Ming");
	stu_data_in.age = 25;
	EXEC SQL INSERT INTO Student VALUES (:stu_data_in);
	printf("插入数据成功 !\n");

	//查询表
	EXEC SQL SELECT * INTO :stu_data_out FROM Student WHERE id=1;
	printf("查询数据成功 !\n id=%d,name=%s,age=%d\n",stu_data_out.id,stu_data_out.name,stu_data_out.age);

	//删除表
	EXEC SQL DROP TABLE Student;		
	EXEC SQL COMMIT WORK;
	EXEC SQL DISCONNECT;
	return 0;
}