暂无图片
人大金仓DCI
我来答
分享
暂无图片 匿名用户
人大金仓DCI

适配人大金仓数据库,使用DCI获取查询结果时出错

data_tmp = (char *) malloc(STR_LEN_1024);
if (!data_tmp)
{
printf("data malloc fail\n");
return NULL;
}
memset(data_tmp, 0, STR_LEN_1024);


status = OCIDefineByPos(ds->stmthp, &defhp, ds->errhp,
icolumn,
(dvoid *) data_tmp,
STR_LEN_1024,
SQLT_STR,
(dvoid *) 0,
(ub2 *) 0,
(ub2 *) 0,
(ub4) DCI_DEFAULT);
if (status != DCI_SUCCESS)
{
free_memory(data_tmp);
return NULL;
}

status = OCIStmtFetch2(ds->stmthp, ds->errhp, 1,
DCI_FETCH_ABSOLUTE,
recno + 1,
DCI_DEFAULT);

if (status == DCI_NO_DATA)
{
free_memory(data_tmp);
return NULL;
}

if (strlen(data_tmp) > 0)
{
data_sz = strlen(data_tmp) + 1;

if (ds->data)
ds->data = (char *) realloc(ds->data, data_sz);
else
ds->data = (char *) malloc(data_sz);
memset(ds->data, 0, data_sz);

strcpy(ds->data, data_tmp);

if (data_tmp)
free(data_tmp);
return ds->data;
}

if (data_tmp)
free(data_tmp);

return NULL; 查询多次后free(data_tmp); 出错 free(): invalid pointer
复制
我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
伟鹏

不好意思,人大金仓的没搞过

暂无图片 评论
暂无图片 有用 0
打赏 0
virvle

不好意思,刚入门,还没搞过这块

暂无图片 评论
暂无图片 有用 0
打赏 0
周伟

暂时没玩儿过人大金仓的,看报错内容似乎就是说free(data_emp) 的时候,指针不对导致了空指针?

data_temp 看起来是个全局变量,是否是中间某次加工,或者某次查询结果然后赋值之后导致这个变量成了空指针(比如插件结果为NULL的时候,指针是个啥情况)?

如果这段代码曾经执行成功过,可以中间加一下debug信息,看看程序最远走到过什么地方,一直到出错的位置,然后分析看看出错时数据库中的数据本身是个什么情况。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
人大金仓kingbaseES 数据库如何通过database_link访问mysql?
回答 1
mysql表需要创建主键
用Redhat6跑Oracle10g 稳定吗?
回答 3
更新换代了,使用主流版本或者国产数据库
请教这个SQL怎么写(列转行问题)?
回答 8
selectfromsourcetblunpivot(valforcolin(col1,col2,col3));
Oracle 10053事件有几个级别,一般常用哪一个?
回答 1
已采纳
关于Oracle10053事件借助Oracle的10053事件event,我们可以监控到CBO对SQL进行成本计算和路径选择的过程和方法。10053事件有两个级别:Level2:2级是1级的一个子集,
谁可以提供下ORACLE 11G的静态库libclntst11.a 或者告知哪里有下载? 官网找的都是动态库
回答 1
这个是做什么用的?
Oracle merge into 怎么看更新多少插入多少?
回答 4
学习
ACID 是什么?它在数据库中的作用是什么?
回答 2
已采纳
ACID是数据库管理系统(DBMS)中用于确保数据事务正确执行的四个基本特性的缩写。每个字母代表一个特性:原子性(Atomicity):原子性要求一个事务中的所有操作要么全部成功,要么全部失败。如果事
你安装非RAC Oracle数据库。在安装过程中,Oracle Universal Installer(OUI)会提示你输入清单目录的路径并指定操作系统组名称。 哪个论述是对的?
回答 5
选:C;在安装非RACOracle数据库时,OracleUniversalInstaller(OUI)确实会要求你输入清单目录(oraInventory)的路径,并且需要指定一个操作系统组,这个组通常
PLSQL或Navicat等工具连接oracle,查询表数据,使一些指定的词汇直接显示成*怎么实现?
回答 2
1.如果你是想使某些列都变成,可以使用wallet功能。2.如果是可以新建一个用户,那么你可以在本用户创建一个视图,视图里用replace处理号,然后在新用户下,以原表名为名称,建立一个指向视图的同义
那么,我们用oracle的时候,需要背下来语法么?
回答 1
已采纳
尽量可以
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~