c++ - Retrieving data type information for columns in an Oracle OCCI ResultSet -
after sending simple query via occi (example: select * all_users) i'm in need know datatype column, moment i've been playing resultset::getcolumnlistmetadata() method without success.
questions:
1. how can datatype using aforementioned method , metadata class?
2. there better documentation out there 1 provided oracle?
i've got old code laying around, guess want. using oci, not occi, maybe helps.
/* number of columns in 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; (ub4 = 1; <= colcount; i++) { /* parameter column */ oracheckerr( m_err, ociparamget((dvoid *)_stmt, oci_htype_stmt, m_err, (dvoid**)&col, i)); /* data-type of column */ oratype = 0; oracheckerr( m_err, ociattrget((dvoid *)col, oci_dtype_param, (dvoid *)&oratype, 0, oci_attr_data_type, m_err)); /* retrieve column name attribute */ namelen = 0; oracheckerr( m_err, ociattrget((dvoid*)col, oci_dtype_param, (dvoid**) &name, &namelen, oci_attr_name, m_err )); /* retrieve length semantics 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 column width in characters */ oracheckerr( m_err, ociattrget((dvoid*)col, oci_dtype_param, (dvoid*) &colwidth, 0, oci_attr_char_size, m_err )); else /* retrieve 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 );
edit: per ypour request:
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; } }
Comments
Post a Comment