- 论坛徽章:
- 0
|
我写一个OCCI的程序,该程序的功能主要是把3个数组中的数据批量插入数据库中:
可是在运行时却发生了ORA-32109: invalid column or parameter position的错误
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <iterator>
#include <iostream>
#include <occi.h>
#include <errno.h>
#include <fcntl.h>
#define ARR_SIZE 5
using namespace std;
using namespace oracle::occi;
int main()
{
Environment* env = NULL;
Connection* conn = NULL;
Statement *stmt = NULL;
try
{
int arr1[ARR_SIZE]={1,2,3,4,5};
char arr2[ARR_SIZE][10]={"bill1","bill2","bill3","bill4","bill5"};
char arr3[ARR_SIZE][10]={"tom1","tom2","tom3","tom4","tom5"};
ub2 idLen[3];
char strSql[1000];
idLen[0]=sizeof(int);
idLen[1]=sizeof(arr2[0]);
idLen[2]=sizeof(arr3[0]);
env = Environment::createEnvironment((Environment::Mode)(Environment::OBJECT|Environment::THREADED_UNMUTEXED));
conn = env->createConnection("test","test","server");
stmt = conn->createStatement();
memset(strSql,0,sizeof(strSql));
sprintf(strSql,"%s","insert into test(COL1,COL2,COL3) values(nvl(:1,0),nvl(:2,' '),nvl(:3,' '))");
fprintf(stderr,"%s\n",strSql);
stmt->setDataBuffer(1,arr1,OCCIINT,sizeof(int),&idLen[0]);
stmt->setDataBuffer(2,arr2,OCCI_SQLT_STR,sizeof(arr2[0]),&idLen[1]);
stmt->setDataBuffer(3,arr3,OCCI_SQLT_STR,sizeof(arr3[0]),&idLen[2]);
stmt->setSQL(strSql);
stmt->executeArrayUpdate(5);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
}
catch(SQLException& e)
{
cerr << e.getMessage()<<endl;
if (conn != NULL)
env->terminateConnection(conn);
if (env != NULL)
Environment::terminateEnvironment(env);
return -1;
}
return 0;
}
|
|
|