【问题标题】:ODBC with oracle, bind numeric fieldsODBC 与 oracle,绑定数字字段
【发布时间】:2013-09-23 15:19:02
【问题描述】:

我有一个大问题。 我使用该函数从 db 读取类型并在 c++ 中绑定正确的类型

SQLGetDescField(cursor->_desc,i,SQL_DESC_TYPE,&field->type,NULL,NULL)

oracle 的那个函数总是告诉我类型是:SQL_DECIMAL 但这是不正确的。

【问题讨论】:

    标签: c++ oracle odbc


    【解决方案1】:

    你看到 VARCHARDATE 列了吗?

    您在架构信息中看到了什么:

    SELECT table_name, column_name, data_type, 
    decode(data_type,
        'DATE', '11',
        'NUMBER', data_precision || ',' || data_scale,
        data_length) data_length
    FROM user_tab_columns
    WHERE table_name='MY_TABLE' AND column_name = 'MY_COLUMN'
    

    在 ODBC 中,我使用 SQLColumns() 函数来读取架构信息,并使用它可以检索(通过 RecordSet)类型名称和列大小(对于各种数字类型而言是不同的)。当然,您可以直接从user_tab_columns 阅读此类信息。对于数字类型,只需注意 data_precisiondata_scale

    【讨论】:

    • 谢谢,但这不是解决方案 :S 问题是 oracle 无法映射正确的数据类型 :S 并且数字被映射到 SQL_DECIMAL 中。我已经修复了显式类型绑定
    • 我知道这不是解决方案,但您没有向我们展示数据库架构(如 CREATE TABLE),也没有向我们展示您认为报告为 SQL_DECIMAL 的正确类型。我尽量避免在评论中输入这么长的 SELECT。对于SQLColumns(),所有数字类型都报告为SQL_DECIMAL,但从您的问题来看,尚不清楚SQLGetDescField() 是否也为非数字类型显示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2014-08-24
    • 2011-03-07
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多