📄 column.c
字号:
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 + -