我有一个类型和大小为VARCHAR2< 50>的列。在我的数据库表中。我在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 ();
}
请告诉我你的意见。感谢。
PS:我已经检查了论坛,并且发布了相同的例外,但找不到我所面对的内容。
答案 0 :(得分:0)
修改查询以使用utl_raw.cast_to_raw(col1)
,而不是简单地返回列。
虽然我想知道你是否会更好地使用普通的旧VARCHAR2,而不是试图像BLOB那样处理它。