数据库 proc编程六
时间:2021-07-01 10:21:17
帮助过:32人阅读
_CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <
string.h>
#include "sqlca.h"
//指示变量:用来对宿主变量做说明
//指示变量作输入:当值-1,表示宿主变量是空值
//指示变量做输出:当值-1,表示返回的变量是空值
//语法格式:宿主变量 [indicator] 指示变量 其中indicator关键字可加可不加
//eg::name1 indicator :name_ind
EXEC SQL BEGIN DECLARE SECTION;
char *serverid=
"scott/123456@orcl";
int ida1[
10];
int idb1[
10];
varchar name1[10][
20];
short name_ind[
10];
//定义指示变量,必须是short宿主类型
EXEC SQL END DECLARE SECTION;
//错误处理升级函数
void sqlerr()
{
int ret=
0;
char stn[
120];
//sqlfc:SQL语句的实际长度
size_t sqlfc,stmlen=
120;
EXEC SQL WHENEVER SQLERROR CONTINUE;
ret=sqlgls(stn,&stmlen,&
sqlfc);
if(ret!=
0)
{
printf("sqlgls() failed ! err code: %d\r\n",ret);
return ;
}
printf("出错的SQL语句是:%.*s\r\n",stmlen,stn);
printf("err reason:%.*s\r\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
}
void main()
{
EXEC SQL WHENEVER SQLERROR DO sqlerr();
EXEC SQL connect:serverid ;
printf("connect ok!\r\n");
EXEC SQL WHENEVER NOT FOUND CONTINUE;
EXEC SQL select ida,idb,name into :ida1,:idb1,:name1:name_ind
from t2;
//sqlca.sqlerrd[2]获取SQL语句查询到的记录数
int count=sqlca.sqlerrd[
2];
//终端打印数据
int i=
0;
for(i=
0;i<count;i++
)
{
if(name_ind[i]==-
1)
{
printf("第%d条:ida1=%d,idb1=%d,name1=%s\r\n",i,ida1[i],idb1[i],
"空值");
}else
{
printf("第%d条:ida1=%d,idb1=%d,name1=%s\r\n",i,ida1[i],idb1[i],name1[i].arr);
}
}
//提交断开连接
EXEC SQL COMMIT RELEASE;
system("pause");
}
数据库 proc编程六
标签:erro turn into string reason for tor fail 连接