zoukankan      html  css  js  c++  java
  • 数据库 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
    ",ret);
            return ;
        }
        printf("出错的SQL语句是:%.*s
    ",stmlen,stn);
        printf("err reason:%.*s
    ",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!
    ");
        //安装没有找到错误函数,没有找到数据(比如要查询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
    ",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");
    }
  • 相关阅读:
    ASP.NET MVC 重点教程一周年版 第七回 UrlHelper 【转】
    Pycharm集成Python编程环境IDE
    每天前进一厘米如何快速迎头赶上
    终于开博
    大家觉得我有理,可以赞扬一下,觉得无理,可以骂一下。
    好久没有见到有人谈论代码生成器了
    看了FxCop工具
    关于30岁的“青春饭”问题的看法。
    更改后缀为.dex文件为.odex文件 让你的程序瘦身 运行更稳定
    HTC Sensation亲测 修改gps.conf 教你显著提高GPS定位速度
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6280181.html
Copyright © 2011-2022 走看看