免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4262 | 回复: 2
打印 上一主题 下一主题

[C++] 非常诡异的OCCI问题,linux下OK,AIX下格屁 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-12 09:53 |只看该作者 |倒序浏览
我写了一个OCCI的程序,该程序在linux下面运行一切正常,但是同样的代码到AIX下再编译运行就出问题了.而且一次提交数量的不同,报的错也不同.
AIX下调用executeArrayUpdate 产生 ORA-32129错误
数据缓存是这样声明的:
typedef char STD_FIELD_VALUE[FETCH_COUNT][MAX_FIELD_LEN];
#pragma pack(1)
typedef struct
{
        unsigned int iRecRowNum;  //有多少行记录
        STD_FIELD_VALUE *pStdValueBuff;
}RECORD_DATA;



数据库插入的方法:
void ExecuteArrayUpdate(string sSql,int iColNum,int iRowNum,RECORD_DATA *pFieldValue,ub2 (*pElemLen)[FETCH_COUNT])
 throw(SQLException)
{
  int iArray[FETCH_COUNT];
    try
    {
        if(m_pStmt==NULL)
            m_pStmt = m_pOcciConn->createStatement();
        m_pStmt->setSQL(sSql);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i<iColNum;i++)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pStmt->setDataBuffer(i+1,pFieldValue->pStdValueBuff[i],OCCI_SQLT_STR,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   MAX_FIELD_LEN,pElemLen[i],(sb2*)NULL,(ub2*)NULL);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pStmt->executeArrayUpdate(iRowNum);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;catch()......
}


当把FETCH_COUNT宏设置成1时,ExecuteArrayUpdate抛出异常 ORA-32129: cannot get information about this column
当把FETCH_COUNT宏设置大于1时,ExecuteArrayUpdate抛出异常 ORA-32109: invalid column or parameter position.

[ 本帖最后由 jiangf 于 2009-10-12 09:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-10-12 11:35 |只看该作者

发个demo版的程序大家看看

#include <iostream>
#include <occi.h>
using namespace std;
using namespace oracle::occi;

#define  ARRAY_SIZE 10

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;Environment *pEnv = NULL;
&nbsp;&nbsp;&nbsp;&nbsp;Connection *pCon = NULL;
&nbsp;&nbsp;&nbsp;&nbsp;Statement *pStmt = NULL;
&nbsp;&nbsp;&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEnv = Environment::createEnvironment ((Environment::Mode)(Environment::OBJECT|Environment::THREADED_UNMUTEXED));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCon = pEnv->createConnection("xxxx", "xxxxx", "xxxxxxxx");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStmt = pCon->createStatement("insert into table(code) values (:1);");
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;catch(SQLException &ex)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<"Error number: "<< ex.getErrorCode() << endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<ex.getMessage() << endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;
&nbsp;&nbsp;&nbsp;&nbsp;}


&nbsp;&nbsp;&nbsp;&nbsp;int pServID[ARRAY_SIZE];
&nbsp;&nbsp;&nbsp;&nbsp;ub2 pLen[ARRAY_SIZE];

&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 0; i < ARRAY_SIZE; ++i)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pServID[i] =i*2;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLen[i] = sizeof(pServID[i]);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;try
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStmt->setDataBuffer(1,pServID, OCCIINT, sizeof(int), pLen,(sb2*)NULL,(ub2*)NULL);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ORA-32109: invalid column or parameter position

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pStmt->executeArrayUpdate(ARRAY_SIZE);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCon->commit();
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;catch(SQLException &ex)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<"Error number: "<< ex.getErrorCode() << endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<ex.getMessage() << endl;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///资源释放

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delete[] pServID;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pServID = NULL;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delete[] pLen;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pLen = NULL;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCon->terminateStatement(pStmt);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pEnv->terminateConnection(pCon);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Environment::terminateEnvironment (pEnv);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;//delete[] pServID;

&nbsp;&nbsp;&nbsp;&nbsp;//pServID = NULL;

&nbsp;&nbsp;&nbsp;&nbsp;//delete[] pLen;

&nbsp;&nbsp;&nbsp;&nbsp;//pLen = NULL;

&nbsp;&nbsp;&nbsp;&nbsp;pCon->terminateStatement(pStmt);
&nbsp;&nbsp;&nbsp;&nbsp;pEnv->terminateConnection(pCon);
&nbsp;&nbsp;&nbsp;&nbsp;Environment::terminateEnvironment (pEnv);
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}


[ 本帖最后由 jiangf 于 2009-10-12 11:37 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-10-13 11:10 |只看该作者
怎么没有人回答呢,顶顶起来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP