通過OCCI發送簡單查詢(例如:select * from ALL_USERS)我需要知道列的數據類型,目前我已經用ResultSet :: getColumnListMetaData()方法沒有成功。
問題:
1.如何使用上述方法和MetaData類獲取數據類型?
2.有沒有比oracle已經提供的更好的文檔?檢索Oracle OCCI結果集中的列的數據類型信息
回答
我已經得到了這個舊代碼,我想它確實是你想要的。它使用OCI,而不是OCCI,但也許它有幫助。
/* Get the number of columns in the query */
ub4 colCount = 0;
oraCheckErr(m_err, OCIAttrGet((dvoid *)_stmt, OCI_HTYPE_STMT, (dvoid *)&colCount,
0, OCI_ATTR_PARAM_COUNT, m_err));
ub2 oraType = 0;
OCIParam *col = 0;
ub4 nameLen, colWidth, charSemantics;
text *name;
for (ub4 i = 1; i <= colCount; i++)
{
/* get parameter for column i */
oraCheckErr(m_err, OCIParamGet((dvoid *)_stmt, OCI_HTYPE_STMT, m_err, (dvoid**)&col, i));
/* get data-type of column i */
oraType = 0;
oraCheckErr(m_err, OCIAttrGet((dvoid *)col, OCI_DTYPE_PARAM,
(dvoid *)&oraType, 0, OCI_ATTR_DATA_TYPE, m_err));
/* Retrieve the column name attribute */
nameLen = 0;
oraCheckErr(m_err, OCIAttrGet((dvoid*)col, OCI_DTYPE_PARAM,
(dvoid**) &name, &nameLen, OCI_ATTR_NAME, m_err));
/* Retrieve the length semantics for the column */
charSemantics = 0;
oraCheckErr(m_err, OCIAttrGet((dvoid*)col, OCI_DTYPE_PARAM,
(dvoid*) &charSemantics,0, OCI_ATTR_CHAR_USED, m_err));
colWidth = 0;
if (charSemantics)
/* Retrieve the column width in characters */
oraCheckErr(m_err, OCIAttrGet((dvoid*)col, OCI_DTYPE_PARAM,
(dvoid*) &colWidth, 0, OCI_ATTR_CHAR_SIZE, m_err));
else
/* Retrieve the column width in bytes */
oraCheckErr(m_err, OCIAttrGet((dvoid*)col, OCI_DTYPE_PARAM,
(dvoid*) &colWidth,0, OCI_ATTR_DATA_SIZE, m_err));
_elements.output.push_back(SQLElement(String(reinterpret_cast<char*>(name), nameLen), getSQLTypes(oraType), i, colWidth));
}
OCIHandleFree ((dvoid*) _stmt, OCI_HTYPE_STMT);
編輯:按ypour要求:
SQLTypes getSQLTypes(ub2 _oracleType)
{
switch(_oracleType)
{
case SQLT_INT:
return stInt;
case SQLT_FLT:
case SQLT_BDOUBLE:
return stDouble;
case SQLT_BFLOAT:
return stFloat;
case SQLT_ODT:
return stDate;
case SQLT_DATE:
case SQLT_TIMESTAMP:
case SQLT_TIMESTAMP_TZ:
case SQLT_TIMESTAMP_LTZ:
return stTimeStamp;
case SQLT_CHR:
case SQLT_NUM:
case SQLT_STR:
case SQLT_VCS:
default:
return stText;
}
}
我認爲數據類型是以字符串形式出現的,而不是以整數形式出現(在OCCI域中),所以不是getString(occi :: MetaData :: ATTR_DATA_TYPE)通過使用getInt()至少不會得到錯誤消息,但是,我不知道如何將數字代碼與適當的oracle數據類型相匹配,也許你的getSQLTypes有答案? 非常感謝您的幫助 – Coredumped 2010-07-26 20:07:07
@Coredumped很高興我能幫上忙。 – Gianni 2010-07-26 20:32:15
非常感謝你真的幫我解決了這個問題 – Coredumped 2010-07-27 20:59:48
您可以使用方法:
MetaData::getInt(occi::MetaData::ATTR_DATA_TYPE);
和可能的類型,你可以找到的枚舉與常量比較返回的值在occiCommon.h中:
enum Type { OCCI_SQLT_CHR=SQLT_CHR, OCCI_SQLT_NUM=SQLT_NUM ... }
- 1. 文本信息檢索結果分析數據集(文本)
- 2. 檢索信息從oracle數據庫
- 3. Oracle OCCI'選擇計數(*)'結果提取
- 4. jTDS錯誤地報告結果集元數據中的數據類型信息(針對DATE列,報告NVARCHAR)
- 5. 從類別搜索數據集中檢索前10條結果
- 6. 檢索數據結構對齊信息
- 7. 通過oracle程序檢索結果集
- 8. 如何查找oracle模式中的數據類型信息?
- 9. Umbraco數據類型。檢索可能的數據類型列表。
- 10. 檢索數據庫中的數據結果爲0結果
- 11. 從QTP中的Oracle數據庫檢索XML類型記錄
- 12. 在groovy.sql中確定Oracle查詢結果的數據類型
- 13. 檢索Teradata中的列和其他元數據信息
- 14. 結果集中的數據檢索延遲java
- 15. 檢索T4中的列映射信息
- 16. pybossa - 結果表中的信息列
- 17. 從JSON中檢索XML中的類型信息
- 18. 如何使用Oracle OCCI庫迭代結果時對列數進行計數?
- 19. 從ADO.NET結果集檢索單個列
- 20. 檢索數據庫結果
- 21. 使用ODP.NET,從Oracle數據庫的列信息創建C#類/結構表
- 22. 高效的java數據結構來刪除和檢索信息?
- 23. 檢索信息最快的數據結構C++
- 24. 獲取通過引用遊標參數返回的結果集的列信息
- 25. 從結果集中獲取信息,而
- 26. 檢索數據庫中的數據並比較asp.net中的檢索結果c#
- 27. 檢索數據集數據庫結構
- 28. oracle數據庫分頁結果集
- 29. 獲取Orchard遷移文件中列的數據類型信息
- 30. CrtIsValidHeapPointer問題與Oracle OCCI元數據:: getString
類似於: MetaData :: getString(occi :: MetaData :: ATTR_TYPECODE); 我總是最終收到一個SQLException和這個描述:** ORA-31124:傳遞的非法屬性** – Coredumped 2010-07-26 19:20:26