【问题标题】:Getting a VARCHAR2 type column: ORA-01460: unimplemented or unreasonable conversion requested获取 VARCHAR2 类型列:ORA-01460:请求未实现或不合理的转换
【发布时间】:2014-12-15 07:56:51
【问题描述】:

我的数据库表中有一个类型和大小为 VARCHAR2 的列。我在我的 CPP 代码中使用 getBlob() 方法来获取值。我面临以下异常。

例外:

ORA-01460:请求的转换未实现或不合理

@line Blob blob = rset->getBlob(1);

代码:

    if(rset->next())
            {
                Blob blob = rset->getBlob(1);
                if(blob.isNull())
                    cout << "Null Blob" << endl;
                else
                {
                    blob.open (OCCI_LOB_READONLY);
                    int blobLength=blob.length();
                    Stream *instream = blob.getStream (1,0);
                    char *buffer = new char[blobLength];
                    memset (buffer, NULL, blobLength);
                    instream->readBuffer (buffer, blobLength);
                    for (int i = 0; i < size; ++i)
                    cout << (int) buffer[i];
                    cout << endl;
                    delete (buffer);
                    blob.closeStream (instream);
                }
                blob.close ();      
    }

请让我知道您的 cmets。谢谢。

PS:我检查了论坛并得到了同样异常的帖子,但找不到与我所面对的内容相关的内容。

【问题讨论】:

  • 我也查了 StackOverflow,发现了 37 篇类似的帖子,你一一查了吗?
  • 是的,我检查了每一个。

标签: c++ sql oracle occi


【解决方案1】:

修改查询以使用utl_raw.cast_to_raw(col1) 而不是简单地返回列。

虽然我想知道您是否最好使用普通的旧 VARCHAR2 而不是尝试像 BLOB 一样处理它。

【讨论】:

  • 感谢您的回复。实际上我并不需要 BLOB。但是,当我尝试使用 getString() 将 VARCHAR2 作为字符串获取时,我失败了。调试时,我能够看到在字符串中获取的值。但是在 (string strCost = rset->getString(1);) 行执行后,应用程序失败,没有任何异常。下面是代码: if(rset->next()) { dMax = rset->getNumber(1); dMin = rset->getNumber(2);字符串 strCost = rset->getString(1); }
  • 我对 OCCI 了解不多,无法提供帮助。我建议您将该问题作为单独的问题发布。使用字符串解决问题比尝试使用 BLOB 解决问题要好。
  • @ Jon Heller,谢谢,我会按照建议发布。
猜你喜欢
  • 2020-06-28
  • 2012-06-17
  • 2015-10-14
  • 2018-08-23
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 2015-09-18
相关资源
最近更新 更多