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

📄 column.c

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

            if (col->csfrm == SQLCS_NCHAR)
                return MT("NVARCHAR2");
            else
                return MT("VARCHAR2");

        case SQLT_NUM:

            if (col->scale == -127 && col->prec > 0)
                 return MT("FLOAT");
             else
                 return MT("NUMBER");

        case SQLT_INT:

             return MT("INTEGER");

        case SQLT_FLT:

             return MT("FLOAT");

#if OCI_VERSION_COMPILE >= OCI_10

        case SQLT_BFLOAT:
        case SQLT_IBFLOAT:

             return MT("BINARY FLOAT");

        case SQLT_BDOUBLE:
        case SQLT_IBDOUBLE:

             return MT("BINARY DOUBLE");

 #endif

        case SQLT_LNG:

             return MT("LONG");

        case SQLT_DAT:
        case SQLT_ODT:
        case SQLT_DATE:

            return MT("DATE");

        case SQLT_RDD:
        case SQLT_RID:

            return MT("ROWID");

        case SQLT_BIN:

            return MT("RAW");

        case SQLT_LBI:

            return MT("LONG RAW");

        case SQLT_RSET:

            return MT("RESULTSET");

        case SQLT_CUR:

            return MT("CURSOR");

        case SQLT_CLOB:

            if (col->subtype == OCI_NCLOB)
                return MT("NCLOB");
            else
                return MT("CLOB");

        case SQLT_BLOB:

            return MT("BLOB");

        case SQLT_BFILE:

            return MT("BINARY FILE LOB");

        case SQLT_CFILE:

            return MT("CFILE");

#if OCI_VERSION_COMPILE >= OCI_9

        case SQLT_TIMESTAMP:

            return MT("TIMESTAMP");

        case SQLT_TIMESTAMP_TZ:

            return MT("TIMESTAMP WITH TIME ZONE");

        case SQLT_TIMESTAMP_LTZ:

            return MT("TIMESTAMP WITH LOCAL TIME ZONE");

        case SQLT_INTERVAL_YM:

            return MT("INTERVAL YEAR TO MONTH");

        case SQLT_INTERVAL_DS:

            return MT("INTERVAL DAY TO SECOND");

#endif

        case SQLT_REF:

            return MT("REF");

#if OCI_VERSION_COMPILE >= OCI_9

        case SQLT_PNTY:
#endif

        case SQLT_NTY:

            if (col->typinf != NULL)
                return col->typinf->name;
            else
                return MT("NAMED TYPE");

       default:

            /* for all other types not supported */
            return MT("?");
    }
}


/* ------------------------------------------------------------------------ *
 * OCI_ColumnGetFullSQLType
 * ------------------------------------------------------------------------ */

unsigned int OCI_API OCI_ColumnGetFullSQLType(OCI_Column *col, mtext *buffer, 
                                              unsigned int len)
{
    OCI_CHECK_PTR(OCI_IPC_COLUMN, col, 0);
    OCI_CHECK_PTR(OCI_IPC_STRING, buffer, 0);

    OCI_RESULT(TRUE);

    buffer[0] = 0;

    /* ISO C functions are supposed to be "standard", but we still see specific
       implementations that make some usage not portable and worse not compatible.
       MS Windows is implementing string conversion characters (%s/%ls) of the 
       printf/wprintf family differently from unixes !
    */

    /* This function returns the same strings as Sql*Plus DESC command */

    switch(col->ocode)
    {
        case SQLT_AFC:

#if defined(OCI_METADATA_UNICODE) && !defined(_WINDOWS)
            len = mtsprintf(buffer, len, MT("%lsCHAR(%i%ls)"), 
#else
            len = mtsprintf(buffer, len, MT("%sCHAR(%i%s)"), 
#endif
                            col->csfrm    == SQLCS_NCHAR ? MT("N") : MT(""),
                            (int) (col->charused == TRUE ? col->charsize : col->size),
                            col->charused == TRUE &&
                            col->csfrm    != SQLCS_NCHAR ? MT(" CHAR") : MT(""));
            break;
 
        case SQLT_AVC:
        case SQLT_STR:
        case SQLT_CHR:
 
#if defined(OCI_METADATA_UNICODE) && !defined(_WINDOWS)
            len = mtsprintf(buffer, len, MT("%lsVARCHAR(%i%ls)"), 
#else
            len = mtsprintf(buffer, len, MT("%sVARCHAR(%i%s)"), 
#endif
                            col->csfrm    == SQLCS_NCHAR ? MT("N") : MT(""),
                            (int) (col->charused == TRUE ? col->charsize : col->size),
                            col->charused == TRUE &&
                            col->csfrm    != SQLCS_NCHAR ? MT(" CHAR") : MT(""));
            break;

        case SQLT_NUM:
 
            if (col->scale == -127 && col->prec > 0)
                len = mtsprintf(buffer, len,  MT("FLOAT(%i)"), col->prec);
            else if (col->scale > 0 && col->prec > 0)
                len = mtsprintf(buffer, len,  MT("NUMBER(%i,%i)"), 
                                (int) col->prec, (int) col->scale);
            else if (col->prec > 0)
                len = mtsprintf(buffer, len,  MT("NUMBER(%i)"), (int) col->prec);
            else
                len = mtsprintf(buffer, len,  MT("NUMBER"));
        
            break;
 
        case SQLT_INT:

            len = mtsprintf(buffer, len,  MT("NUMBER"));
            break;

        case SQLT_FLT:

            len = mtsprintf(buffer, len,  MT("FLOAT(%i)"), (int) col->prec);
            break;

#if OCI_VERSION_COMPILE >= OCI_10

        case SQLT_BFLOAT:
        case SQLT_IBFLOAT:

            len = mtsprintf(buffer, len,  MT("BINARY FLOAT"));
            break;

        case SQLT_BDOUBLE:
        case SQLT_IBDOUBLE:

             len = mtsprintf(buffer, len,  MT("BINARY DOUBLE"));
            break;

#endif

        case SQLT_LNG:

            len = mtsprintf(buffer, len, MT("LONG"));
            break;

        case SQLT_DAT:
        case SQLT_ODT:
        case SQLT_DATE:

            len = mtsprintf(buffer, len, MT("DATE"));
            break;

        case SQLT_RDD:
        case SQLT_RID:

            len = mtsprintf(buffer, len,  MT("ROWID"));
            break;

        case SQLT_BIN:
            len = mtsprintf(buffer, len, MT("RAW(%i)"), (int) col->size);
            break;

        case SQLT_LBI:

            len = mtsprintf(buffer, len, MT("LONG RAW(%i)"), (int) col->size);
            break;

        case SQLT_RSET:

            len = mtsprintf(buffer, len,  MT("RESULTSET"));
            break;

        case SQLT_CUR:

            len = mtsprintf(buffer, len,  MT("CURSOR"));
            break;

        case SQLT_CLOB:

            if (col->subtype == OCI_NCLOB)
                len = mtsprintf(buffer, len,  MT("NCLOB"));
            else
                len = mtsprintf(buffer, len,  MT("CLOB"));
            break;

        case SQLT_BLOB:

            len = mtsprintf(buffer, len,  MT("BLOB"));
            break;

        case SQLT_BFILE:

            len = mtsprintf(buffer, len,  MT("BINARY FILE LOB"));
            break;
 
        case SQLT_CFILE:
 
            len = mtsprintf(buffer, len,  MT("CFILE"));
            break;
 
#if OCI_VERSION_COMPILE >= OCI_9

        case SQLT_TIMESTAMP:

            len = mtsprintf(buffer, len,  MT("TIMESTAMP(%i)"), (int) col->prec);
            break;
 
        case SQLT_TIMESTAMP_TZ:
 
            len = mtsprintf(buffer, len,  MT("TIMESTAMP(%i) WITH TIME ZONE"),
                            (int) col->prec);
            break;
 
        case SQLT_TIMESTAMP_LTZ:
 
            len = mtsprintf(buffer, len,  MT("TIMESTAMP(%i) WITH LOCAL TIME ZONE"),
                            (int) col->prec);
            break;
 
        case SQLT_INTERVAL_YM:
 
           len = mtsprintf(buffer, len,  MT("INTERVAL(%i) YEAR TO MONTH(%i)"),
                            (int) col->prec, (int) col->prec2);
            break;
 
       case SQLT_INTERVAL_DS:
 
            len = mtsprintf(buffer, len,  MT("INTERVAL(%i) DAY TO SECOND(%i)"),
                            (int) col->prec, (int) col->prec2);
            break;

#endif
       
       case SQLT_REF:

            len = mtsprintf(buffer, len,  MT("REF"));
            break;

#if OCI_VERSION_COMPILE >= OCI_9

        case SQLT_PNTY:
#endif

        case SQLT_NTY:
 
            if (col->typinf != NULL)
                len = mtsprintf(buffer, len, col->typinf->name);
            else
                len = mtsprintf(buffer, len, MT("NAMED TYPE"));
            break;

        default:

            mtsncat(buffer, MT("?"), len);
    }

    return len;
}
    
/* ------------------------------------------------------------------------ *
 * OCI_ColumnGetTypeInfo
 * ------------------------------------------------------------------------ */

OCI_TypeInfo * OCI_API OCI_ColumnGetTypeInfo(OCI_Column *col)
{
    OCI_CHECK_PTR(OCI_IPC_COLUMN, col, FALSE);

    OCI_RESULT(TRUE);

    return col->typinf;
}

/* ------------------------------------------------------------------------ *
 * OCI_ColumnGetSubType
 * ------------------------------------------------------------------------ */

unsigned int OCI_API OCI_ColumnGetSubType(OCI_Column *col)
{
    unsigned int type = OCI_UNKNOWN;

    OCI_CHECK_PTR(OCI_IPC_COLUMN, col, OCI_UNKNOWN);

    OCI_RESULT(TRUE);

    if (col->type == OCI_CDT_LONG      || 
        col->type == OCI_CDT_LOB       ||
        col->type == OCI_CDT_FILE      ||
        col->type == OCI_CDT_TIMESTAMP ||
        col->type == OCI_CDT_INTERVAL)
    {
        type = col->subtype;
    }

    return type;
}

⌨️ 快捷键说明

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