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