VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

处理数据类型

DCI支持Vastbase中各种类型的读写操作,例如数字类型,字符串类型,日期类型,大对象类型等。

例如:

CREATE TABLE T1 (C1 int, C2 real, C3 CHAR(100), C4 VARCHAR(100), C5 FLOAT, C6 NUMERIC(22,7), C7 Date, C8 bigint, C9 timestamp (6) with time zone, C10 clob, c11 bfile);

不支持类型与操作

  • 暂不支持XML,JSON,几何类型、数据库对象tablespace。

  • 函数(包括内外置函数、外置包函数)存储过程、package不支持。

  • 部分接口参数不支持。

    • 长度指示器不支持;
    • 模式只支持默认和分段获取;
    • 具体见接口手册。
  • lob只支持基表简单查询及使用。

  • DCIDate、DCIDateTime这两个格式化只支持部分类型,具体见接口手册中的说明。

插入记录

DCIStmt *stmthp;

int custno = 998999; //int类型
float DCIrel = 2; //real类型
char *DCIchar = "c"; //char类型
char *DCIvarchar = "odbcDCI-byname"; //varchar类型
float DCIfloat = 4; //float类型

DCIBind *bnd1p = (DCIBind *) 0;
DCIBind *bnd2p = (DCIBind *) 0;
DCIBind *bnd3p = (DCIBind *) 0;
DCIBind *bnd4p = (DCIBind *) 0;
DCIBind *bnd5p = (DCIBind *) 0;

text *sqlstmt = (text *) "insert into T1(C1, C2, C3, C4, C5, C8, C10, C11) value ( :a, :b, :c, :d, :e, 42949672, 'vastbase-g100', bfilename('d_bfile', 'bfile.data'))";

if(DCIHandleAlloc ((dvoid *) envhp, (dvoid **) &errhp, DCI_HTYPE_ERROR,
             (size_t) 0, (dvoid **) 0))
{
    printf("FAILED: DCIHandleAlloc()\n");         
    return DCI_ERROR
}

if(DCIStmtPrepare(stmthp, errhp, sqlstmt, strlen((char *)sqlstmt), DCI_NTV_SYNTAX, 0))
{
    printf("FAILED: DCIStmtPrepare()\n");
    return DCI_ERROR;
}

if(DCIBindByName(stmthp, &bnd1p, errhp, (text *) ":a",
        (sb4) -1, (dvoid *) &custno,
        (sb4) sizeof(int), SQLT_INT,
        (dvoid *) 0, (ub2 *)0, (ub2 *)0, (ub4) 0, (ub4 *) 0,
        (ub4) DCI_DEFAULT))
{
    printf("FAILED: DCIBindByName()\n");
    return DCI_ERROR;
}

if(DCIBindByName(stmthp, &bnd2p, errhp, (text *) ":b",
(sb4) -1, (dvoid *) &DCIrel,
(sb4) sizeof(float), SQLT_FLT,
(dvoid *) 0, (ub2 *)0, (ub2 *)0, (ub4) 0, (ub4 *) 0,
(ub4) DCI_DEFAULT))
{
    printf("FAILED: DCIBindByName()\n");
    return DCI_ERROR;
}

if(DCIBindByName(stmthp, &bnd3p, errhp, (text *) ":c",
        (sb4) -1, (dvoid *) DCIchar,
        (sb4) sizeof(char)*1024, SQLT_CHR,
        (dvoid *) 0, (ub2 *)0, (ub2 *)0, (ub4) 0, (ub4 *) 0,
        (ub4) DCI_DEFAULT))
{
    printf("FAILED: DCIBindByName()\n");
    return DCI_ERROR;
}

if(DCIBindByName(stmthp, &bnd1p, errhp, (text *) ":d",
        (sb4) -1, (dvoid *) DCIvarchar,
        (sb4) strlen(DCIvarchar)+1, SQLT_CHR,
        (dvoid *) 0, (ub2 *)0, (ub2 *)0, (ub4) 0, (ub4 *) 0,
        (ub4) DCI_DEFAULT))
{
    printf("FAILED: DCIBindByName()\n");
    return DCI_ERROR;
}

if(DCIBindByName(stmthp, &bnd2p, errhp, (text *) ":e",
        (sb4) -1, (dvoid *) &DCIfloat,
        (sb4) sizeof(float), SQLT_FLT,
        (dvoid *) 0, (ub2 *)0, (ub2 *)0, (ub4) 0, (ub4 *) 0,
        (ub4) DCI_DEFAULT))
{
    printf("FAILED: DCIBindByName()\n");
    return DCI_ERROR;
}

if(DCIStmtExecute(svchp, stmthp, errhp, 0, 0, 0, 0, 0))
{
    printf("FAILED: DCIStmtExecute()\n");
}

读取记录

DCIStmt *stmthp;

text *sqlstmt=(text *)"select C1,C2,C3,C4,C5,C6,C7 from T2";

int    *c1 = (int*) malloc (sizeof(int) * 10);
float   *c2 = (float *) malloc (sizeof(float) * 10);
char   *c3 = (char *) malloc (sizeof(char) * 10 * 101);
char   *c4 = (char *) malloc (sizeof(char) * 10 * 101);
float   *c5 = (float *) malloc (sizeof(float) * 10);
DCINumber *c6 = (DCINumber *) malloc (sizeof(DCINumber) * 10);
int     *c7 = (int *) malloc (sizeof(int) * 10);
DCIDefine *bndhp[7];
ub4 stmrow, stmrowEx;
DCIparam* colhd = NULL;
int i = '+';
memset(c1, 0, sizeof(int) * 10);
memset(c2, 0, sizeof(float) * 10);
memset(c3, 0, sizeof(char) * 10 * 101);
memset(c4, 0, sizeof(char) * 10 * 101);
memset(c5, 0, sizeof(float) * 10);
memset(c6, 0, sizeof(DCINumber) * 10);
memset(c7, 0, sizeof(int) * 10);
if(DCIHandleAlloc ((dvoid *) envhp, (dvoid **) &errhp, DCI_HTYPE_ERROR,
             (size_t) 0, (dvoid **) 0))
{
    printf("FAILED: DCIHandleAlloc()\n");         
    return DCI_ERROR
}

if(DCIStmtPrepare(stmthp, errhp, sqlstmt, strlen((char *)sqlstmt), DCI_NTV_SYNTAX, 0))
{
    printf("FAILED: DCIStmtPrepare()\n");
    return DCI_ERROR;
}

if(DCIStmtExecute(svchp, stmthp, errhp, 0, 0, 0, 0, 0))
{
    printf("FAILED: DCIStmtExecute()\n");
}

if(DCIDefineByPos(stmthp, &bndhp[0], errhp, 1
(dvoid *)c1, (sb4)sizeof(int), (ub2)SQLT_INT,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}
if(DCIDefineByPos(stmthp, &bndhp[1], errhp, 2
(dvoid *)c2, (sb4)sizeof(float), (ub2)SQLT_FLT,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}
if(DCIDefineByPos(stmthp, &bndhp[2], errhp, 3
(dvoid *)c3, (sb4)101, (ub2)SQLT_CHR,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}
if(DCIDefineByPos(stmthp, &bndhp[3], errhp, 4
(dvoid *)c4, (sb4)101, (ub2)SQLT_STR,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}
if(DCIDefineByPos(stmthp, &bndhp[4], errhp, 5
(dvoid *)c5, (sb4)sizeof(float), (ub2)SQLT_FLT,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}
if(DCIDefineByPos(stmthp, &bndhp[5], errhp, 6
(dvoid *)c6, (sb4)sizeof(DCINumber), (ub2)SQLT_VNU,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}
if(DCIDefineByPos(stmthp, &bndhp[6], errhp, 7
(dvoid *)c7, (sb4)sizeof(int), (ub2)SQLT_INT,
(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)DCI_DEFAULT))
{
    printf("FAILED: DCIDefineByPos()\n");
    return DCI_ERROR;
}

if (DCIDefineArrayOfStruct(bndhp[0], errhp, sizeof(int), 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}
if (DCIDefineArrayOfStruct(bndhp[1], errhp, sizeof(SQLT_FLT), 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}
if (DCIDefineArrayOfStruct(bndhp[2], errhp, 101, 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}
if (DCIDefineArrayOfStruct(bndhp[3], errhp, 101, 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}
if (DCIDefineArrayOfStruct(bndhp[4], errhp, sizeof(float), 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}
if (DCIDefineArrayOfStruct(bndhp[5], errhp, sizeof(DCINumber), 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}
if (DCIDefineArrayOfStruct(bndhp[6], errhp, sizeof(int), 0, 0, 0))
{
    printf("FAILED: DCIDefineArrayOfStruct ()\n");
    return DCI_ERROR;
}

if(DCIStmtFetch(stmthp, errhp, GET_ROWS, DCI_FETCH_NEXT, 0))
{
    printf("FAILED: DCIStmtFetch ()\n");
    return DCI_ERROR;
}