首页 > 代码库 > 数据库 proc编程六

数据库 proc编程六

#define _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编程六