⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statement.c

📁 oci的源码,可以在任何平台上编译,相当方便实用
💻 C
📖 第 1 页 / 共 5 页
字号:

/* ------------------------------------------------------------------------ *
 * OCI_BindUnsignedBigInt
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindUnsignedBigInt(OCI_Statement *stmt, const mtext *name,
                                      big_uint *data)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_BIGINT);

    return OCI_BindData(stmt, data, sizeof(OCINumber), name, OCI_CDT_NUMERIC,
                        SQLT_VNU, OCI_BIND_INPUT, OCI_NUM_BIGUINT, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfUnsignedInts
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfUnsignedBigInts(OCI_Statement *stmt,
                                               const mtext *name,
                                               big_uint *data,
                                               unsigned int nbelem)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_BIGINT);

    return OCI_BindData(stmt, data, sizeof(OCINumber), name, OCI_CDT_NUMERIC,
                        SQLT_VNU, OCI_BIND_INPUT, OCI_NUM_BIGUINT, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindString
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindString(OCI_Statement *stmt, const mtext *name,
                               dtext *data, unsigned int len)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_STRING);

    if (len == 0 || len == UINT_MAX)
        len = (int) dtslen(data);

    return OCI_BindData(stmt, data, (len + 1) * sizeof(odtext), name, OCI_CDT_TEXT,
                        SQLT_STR, OCI_BIND_INPUT, 0, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfStrings
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfStrings(OCI_Statement *stmt, const mtext *name,
                                       dtext *data, unsigned int len,
                                       unsigned int nbelem)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_STRING);

    OCI_CHECK_MIN(stmt->con, stmt, len, 1, FALSE);

    return OCI_BindData(stmt, data, (len + 1) * sizeof(odtext), name, OCI_CDT_TEXT,
                        SQLT_STR, OCI_BIND_INPUT, 0, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindRaw
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindRaw(OCI_Statement *stmt, const mtext *name, void *data,
                               unsigned int len)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_VOID);

    OCI_CHECK_MIN(stmt->con, stmt, len, 1, FALSE);

    return OCI_BindData(stmt, data, len, name, OCI_CDT_RAW,
                        SQLT_BIN, OCI_BIND_INPUT, 0, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfRaws
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfRaws(OCI_Statement *stmt, const mtext *name,
                                       void  *data, unsigned int len,
                                       unsigned int nbelem)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_VOID);

    OCI_CHECK_MIN(stmt->con, stmt, len, 1, FALSE);

    return OCI_BindData(stmt, data, len, name, OCI_CDT_RAW,
                        SQLT_BIN, OCI_BIND_INPUT, 0, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindDouble
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindDouble(OCI_Statement *stmt, const mtext *name,
                               double *data)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_DOUBLE);

    return OCI_BindData(stmt, data, sizeof(double), name, OCI_CDT_NUMERIC,
                        SQLT_FLT, OCI_BIND_INPUT, 0, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfDoubles
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfDoubles(OCI_Statement *stmt, const mtext *name,
                                       double *data, unsigned int nbelem)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_DOUBLE);

    return OCI_BindData(stmt, data, sizeof(double), name, OCI_CDT_NUMERIC,
                        SQLT_FLT, OCI_BIND_INPUT, 0, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindDate
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindDate(OCI_Statement *stmt, const mtext *name,
                             OCI_Date *data)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_DATE);

    return OCI_BindData(stmt, data, sizeof(OCIDate), name, OCI_CDT_DATETIME,
                        SQLT_ODT, OCI_BIND_INPUT, 0, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfDates
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfDates(OCI_Statement *stmt, const mtext *name,
                                     OCI_Date **data, unsigned int nbelem)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_DATE);

    return OCI_BindData(stmt, data, sizeof(OCIDate), name, OCI_CDT_DATETIME,
                        SQLT_ODT, OCI_BIND_INPUT, 0, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindTimestamp
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindTimestamp(OCI_Statement *stmt, const mtext *name,
                                  OCI_Timestamp *data)
{
    int code    = 0;
    boolean res = FALSE;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_TIMESTAMP);

    OCI_CHECK_TIMESTAMP_ENABLED(stmt->con, FALSE);

#if OCI_VERSION_COMPILE >= OCI_9

    /* map oracle internal type */

    if (data->type == OCI_TIMESTAMP_TZ)
        code = SQLT_TIMESTAMP_TZ;
    else if (data->type == OCI_TIMESTAMP_LTZ)
        code = SQLT_TIMESTAMP_LTZ;
    else
        code = SQLT_TIMESTAMP;

    res = OCI_BindData(stmt, data, sizeof(OCIDateTime *), name, OCI_CDT_TIMESTAMP,
                       code, OCI_BIND_INPUT, data->type, NULL, 0);

#else

    OCI_NOT_USED(name);
    OCI_NOT_USED(code);
    OCI_NOT_USED(code);

#endif

    return res;
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfTimestamps
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfTimestamps(OCI_Statement *stmt, const mtext *name,
                                          OCI_Timestamp **data,
                                          unsigned int type,
                                          unsigned int nbelem)
{
    unsigned int code    = 0;
    boolean res          = FALSE;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_TIMESTAMP);

    OCI_CHECK_TIMESTAMP_ENABLED(stmt->con, FALSE);

#if OCI_VERSION_COMPILE >= OCI_9

    /* map oracle internal type */

    if (type == OCI_TIMESTAMP_TZ)
        code = SQLT_TIMESTAMP_TZ;
    else if (type == OCI_TIMESTAMP_LTZ)
        code = SQLT_TIMESTAMP_LTZ;
    else
        code = SQLT_TIMESTAMP;

    res =  OCI_BindData(stmt, data, sizeof(OCIDateTime *), name, OCI_CDT_TIMESTAMP,
                        code, OCI_BIND_INPUT, type, NULL, nbelem);

#else

    OCI_NOT_USED(name);
    OCI_NOT_USED(type);
    OCI_NOT_USED(code);
    OCI_NOT_USED(nbelem);

#endif

    return res;
}

/* ------------------------------------------------------------------------ *
 * OCI_BindInterval
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindInterval(OCI_Statement *stmt, const mtext *name,
                                  OCI_Interval *data)
{
    int code    = 0;
    boolean res = FALSE;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_INTERVAL);

    OCI_CHECK_INTERVAL_ENABLED(stmt->con, FALSE);

#if OCI_VERSION_COMPILE >= OCI_9

    /* map oracle internal type */

    if (data->type == OCI_INTERVAL_YM)
        code = SQLT_INTERVAL_YM;
    else if (data->type == OCI_INTERVAL_DS)
        code = SQLT_INTERVAL_DS;

    res = OCI_BindData(stmt, data, sizeof(OCIInterval *), name, OCI_CDT_INTERVAL,
                       code, OCI_BIND_INPUT, data->type, NULL, 0);

#else

    OCI_NOT_USED(name);
    OCI_NOT_USED(code);

#endif

    return res;
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfIntervals
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfIntervals(OCI_Statement *stmt, const mtext *name,
                                         OCI_Interval **data,
                                         unsigned int type,
                                         unsigned int nbelem)
{
    unsigned int code = 0;
    boolean res       = FALSE;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_INTERVAL);

    OCI_CHECK_INTERVAL_ENABLED(stmt->con, FALSE);

#if OCI_VERSION_COMPILE >= OCI_9

    /* map oracle internal type */

    if (type == OCI_INTERVAL_YM)
        code = SQLT_INTERVAL_YM;
    else if (type == OCI_INTERVAL_DS)
        code = SQLT_INTERVAL_DS;

    res = OCI_BindData(stmt, data, sizeof(OCIInterval *), name, OCI_CDT_INTERVAL,
                       code, OCI_BIND_INPUT, type, NULL, nbelem);

#else

    OCI_NOT_USED(name);
    OCI_NOT_USED(type);
    OCI_NOT_USED(code);
    OCI_NOT_USED(nbelem);

#endif

    return res;
}

/* ------------------------------------------------------------------------ *
 * OCI_BindObject
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindObject(OCI_Statement *stmt, const mtext *name,
                               OCI_Object *data)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_OBJECT);

    return OCI_BindData(stmt, data, sizeof(void*), name, OCI_CDT_OBJECT,
                        SQLT_NTY, OCI_BIND_INPUT, 0, data->typinf, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfObjects
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfObjects(OCI_Statement *stmt, const mtext *name,
                                       OCI_Object **data, OCI_TypeInfo *typinf,
                                       unsigned int nbelem)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_OBJECT);

    OCI_CHECK_PTR(OCI_IPC_TYPE_INFO, typinf, FALSE);

    return OCI_BindData(stmt, data, sizeof(void *), name, OCI_CDT_OBJECT,
                        SQLT_NTY, OCI_BIND_INPUT, 0, typinf, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindLob
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindLob(OCI_Statement *stmt, const mtext *name,
                            OCI_Lob *data)
{
    int code = 0;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_LOB);

    /* map oracle internal type */

    if (data->type == OCI_CLOB || data->type == OCI_NCLOB)
        code = SQLT_CLOB;
    else
        code = SQLT_BLOB;

    return OCI_BindData(stmt, data, sizeof(OCILobLocator*), name, OCI_CDT_LOB,
                        code, OCI_BIND_INPUT, data->type, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfLobs
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfLobs(OCI_Statement *stmt, const mtext *name,
                                    OCI_Lob **data, unsigned int type,
                                    unsigned int nbelem)
{
    unsigned int code = 0;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_LOB);

    /* map oracle internal type */

    if (type == OCI_CLOB || type == OCI_NCLOB)
        code = SQLT_CLOB;
    else
        code = SQLT_BLOB;

    return OCI_BindData(stmt, data, sizeof(OCILobLocator*), name, OCI_CDT_LOB,
                        code, OCI_BIND_INPUT, type, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindFile
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindFile(OCI_Statement *stmt, const mtext *name,
                             OCI_File *data)
{
    int code = 0;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_FILE);

    /* map oracle internal type */

    if (data->type == OCI_CFILE)
        code = SQLT_CFILE;
    else
        code = SQLT_BFILE;

    return OCI_BindData(stmt, data, sizeof(OCILobLocator*), name, OCI_CDT_FILE,
                        code, OCI_BIND_INPUT, data->type, NULL, 0);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindArrayOfFiles
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindArrayOfFiles(OCI_Statement *stmt, const mtext *name,
                                     OCI_File **data, unsigned int type,
                                     unsigned int nbelem)
{
    unsigned int code = 0;

    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_FILE);

    /* map oracle internal type */

    if (type == OCI_CFILE)
        code = SQLT_CFILE;
    else
        code = SQLT_BFILE;

    return OCI_BindData(stmt, data, sizeof(OCILobLocator*), name, OCI_CDT_FILE,
                        code, OCI_BIND_INPUT, type, NULL, nbelem);
}

/* ------------------------------------------------------------------------ *
 * OCI_BindRef
 * ------------------------------------------------------------------------ */

boolean OCI_API OCI_BindRef(OCI_Statement *stmt, const mtext *name, OCI_Ref *data)
{
    OCI_CHECK_BIND_CALL(stmt, name, data, OCI_IPC_REF);

    return OCI_BindData(stmt, data, sizeof(OCIRef *), name, OCI_CDT_REF,
                        SQLT_REF, OCI_BIND_INPUT, 0, data->typinf, 0);
}

/* ---------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -