数据库 proc编程五

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlca.h"

//注意:在oracle中,如果使用char定长类型,那么数据库中的数据如果不足20,那么oracle默认以空格填充
//varchar是变长类型,不足20,oracle不会填充空格
//varchar本质上是typedef struct { unsigned short len; unsigned char arr[1]; } varchar;是个结构
//但是在做输入(例如insert into)的时候,char和varchar没有区别

EXEC SQL BEGIN DECLARE SECTION;
    char *serverid="scott/123456@orcl";

    int deptno1[100];
    char dname1[100][20];
    char loc1[100][20];

    int deptno2[100];
    varchar dname2[100][20];
    varchar loc2[100][20];

    int ida1[10];
    int idb1[10];
    char name1[10][20];
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");
    //安装没有找到错误函数,没有找到数据(比如要查询100条数据,但是数据库只有5条),继续执行下一条语句
    EXEC SQL WHENEVER NOT FOUND CONTINUE;
    //执行多条查询--
    //into关键字解释:因为要将查询出来的数据放入宿主变量中
    EXEC SQL select deptno,dname,loc into :deptno2,:dname2,:loc2 from dept;
    //sqlca.sqlerrd[2]获取SQL语句查询到的记录数
    int count=sqlca.sqlerrd[2];
    //终端打印数据
    int i=0;
    for(i=0;i<count;i++)
    {
        printf("第%d条:deptno=%d,dname=%s,loc=%s\r\n",i,deptno2[i],dname2[i].arr,loc2[i].arr);
    }
    //批量插入
    for(i=0;i<10;i++)
    {
        ida1[i]=i+1;
        idb1[i]=i*3;
        strcpy(name1[i],"hello");
    }
    //for 5:表示只插入5条数据
    //bug提示:有时候insert 操作会卡住,这可能是由于表中已经有相同的主键了,约束下无法插入
    EXEC SQL for 5 insert into t2 values(:ida1,:idb1,:name1);
    //提交断开连接
    EXEC SQL COMMIT RELEASE;
    system("pause");
}

 

posted on 2017-01-12 22:57  寒魔影  阅读(283)  评论(0编辑  收藏  举报

导航