#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sqlca.h"
//申明库函数
extern sqlgls(char * , size_t *, size_t * );
extern sqlglmt(void *,char *,size_t *,size_t *);
typedef char dnameType[20];
typedef char locType[20];
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL TYPE dnameType is string(20);
EXEC SQL TYPE locType is string(20);
char *serverid = "c##scott/root";
int deptno;
dnameType dname; //string 数据类型
short dname_ind;
locType loc;
short loc_ind;
EXEC SQL END DECLARE SECTION;
void connet();
void sqlerr02();
int main()
{
int ret = 0;
int i = 0;
EXEC SQL WHENEVER SQLERROR DO sqlerr02();
connet();
//1 定义游标 declare cursor 在为某一次查询
EXEC SQL DECLARE my_cur SCROLL CURSOR FOR
select deptno, dname, loc from dept;
//2 打开游标 open cursor
EXEC SQL OPEN my_cur ;
//3 获取数据 fetch data
//查询最后一条数据
EXEC SQL FETCH LAST my_cur INTO :deptno, :dname:dname_ind, :loc:loc_ind;
printf("%d\t %s\t %s \n", deptno, dname, loc );
//查询第一条数据
EXEC SQL FETCH FIRST my_cur INTO :deptno, :dname:dname_ind, :loc:loc_ind;
printf("%d\t %s\t %s \n", deptno, dname, loc );
//查询第3条数据
EXEC SQL FETCH ABSOLUTE 2 my_cur INTO :deptno, :dname:dname_ind, :loc:loc_ind;
printf("%d\t %s\t %s \n", deptno, dname, loc );
//查询相对第3条数据
EXEC SQL FETCH RELATIVE 2 my_cur INTO :deptno, :dname:dname_ind, :loc:loc_ind;
printf("%d\t %s\t %s \n", deptno, dname, loc );
//查询下一条
EXEC SQL FETCH NEXT my_cur INTO :deptno, :dname:dname_ind, :loc:loc_ind;
printf("%d\t %s\t %s \n", deptno, dname, loc );
//查询前一条
EXEC SQL FETCH PRIOR my_cur INTO :deptno, :dname:dname_ind, :loc:loc_ind;
printf("%d\t %s\t %s \n", deptno, dname, loc );
//4 关闭游标 close data
EXEC SQL CLOSE my_cursor ;
EXEC SQL COMMIT WORK RELEASE;
return ret ;
}
void connet()
{
int ret = 0;
//连接数据库
EXEC SQL connect :serverid;
if (sqlca.sqlcode != 0)
{
ret = sqlca.sqlcode;
printf("sqlca.sqlcode: err:%d \n", sqlca.sqlcode);
return ;
}
else
{
printf("connect ok...\n");
}
}
void sqlerr02()
{
char stm[120];
size_t sqlfc, stmlen=120;
unsigned int ret = 0;
//出错时,可以把错误SQL语言给打印出来
EXEC SQL WHENEVER SQLERROR CONTINUE;
ret = sqlgls(stm, &stmlen, &sqlfc);
printf("出错的SQL:%.*s\n", stmlen, stm);
printf("出错原因:%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
//printf("出错原因:%.70s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
exit(1);
}
Oracle pro*c/c++ scrollable cursor
最新推荐文章于 2021-04-15 17:44:00 发布