OCCI (예 : select * from ALL_USERS)를 통해 간단한 쿼리를 보낸 후 열의 데이터 유형을 알아야 할 필요가 있습니다. ResultSet :: getColumnListMetaData() 메서드를 사용하여 성공하지 못했습니다.
질문 :
1. 어떻게 앞에서 설명한 메서드와 MetaData 클래스를 사용하여 데이터 형식을 가져올 수 있습니까?
2. 오라클이 이미 제공 한 문서보다 더 좋은 문서가 있습니까?Oracle OCCI ResultSet의 열에 대한 데이터 유형 정보 검색
답변
저는이 오래된 코드를 사용하고 있습니다. 정확히 원하는대로 할 것입니다. OCCI가 아닌 OCI를 사용하지만 어쩌면 도움이됩니다.
/* 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 랜드에서) 정수로오고 있다고 생각했습니다. getInt()를 사용하여 getString (occi :: MetaData :: ATTR_DATA_TYPE)에 적어도 오류 메시지가 나타나지는 않지만 적절한 Oracle 데이터 유형에 숫자 코드를 일치시키는 방법을 모르겠다. 아마도 getSQLTypes에 대답? 도움을 많이 주셔서 감사합니다 – Coredumped
@Coredumped 기꺼이 도와 드리겠습니다. – Gianni
덕분에 그 스 니펫으로 나를 도왔습니다. – Coredumped
:
MetaData::getInt(occi::MetaData::ATTR_DATA_TYPE);
을 당신이 찾을 수있는 가능한 형태의 열거 형 정수로 반환 된 값을 비교 occiCommon.h :
enum Type { OCCI_SQLT_CHR=SQLT_CHR, OCCI_SQLT_NUM=SQLT_NUM ... }
- 1. oracle 데이터 유형
- 2. 기본 데이터베이스에서 데이터 유형 검색
- 3. 테이블의 열에 대한 SQL 쿼리 .... (Oracle)
- 4. oracle select query - 여러 열에 대한 인덱스
- 5. 실험실 정보 시스템에 대한 정보 검색
- 6. EKCalendar에 대한 계정 정보 검색
- 7. Entity Framework 메타 데이터 정보 POCO 유형
- 8. Oracle 내장 유형
- 9. OCCI : 패키지 내 저장 프로 시저의 메타 데이터 쿼리
- 10. Oracle JDBC 등록 정보
- 11. ResultSet의 열에 모든 행의 값이 포함되어 있는지 확인하십시오.
- 12. C# datatypes -> oracle 데이터 유형
- 13. Business Objects - Oracle 바이너리 이중 데이터 유형
- 14. where 절에 oracle 원시 데이터 유형
- 15. C# 및 Oracle 번호 데이터 유형
- 16. Oracle 오류 : 일치하지 않는 데이터 유형
- 17. Oracle 문자 유형
- 18. OCCI 컨텍스트 및 환경이란 무엇입니까?
- 19. CLR 유형 매핑에 대한 Oracle Data Provider
- 20. Oracle 데이터 유형 NUMERIC에 해당하는 Java 데이터 유형은 무엇입니까?
- 21. plist 파일에서 데이터 및 시간 정보 검색
- 22. 질문 개체 유형 정보
- 23. 열에 대한 데이터를 저장하는 SQL
- 24. Silverlight에서 글꼴에 대한 픽셀 정보 검색
- 25. Oracle TIMESTAMP 유형
- 26. 오라클 OCCI - 인덱스 대신 이름으로 열 얻기
- 27. Oracle COLLECT 함수 및 유형
- 28. oracle 데이터 유형 = 숫자, 지수는 정밀도와 스케일과 어떤 관련이 있습니까?
- 29. plsql에서 동일한 열에 대해 동일한 열의 다른 데이터 유형
- 30. SQLALchemy의 Varchar 데이터 유형 열에 제약 조건을 확인하는 방법은 무엇입니까?
다음과 같이 표시됩니다. MetaData :: getString (occi :: MetaData :: ATTR_TYPECODE); 항상이 설명과 함께 SQLException을받습니다. ** ORA-31124 : 잘못된 속성이 전달되었습니다 ** – Coredumped