oo4o批量导入的问题(C++)

ruixp 2009-01-19 01:33:33
我想用oracle oo4o的批量导入功能插入具有动态数组类型的数据,我的实验表和相关代码如下:
但是出现错误,
---------------------------
OIP-04149: Invalid input object for field and parameters
---------------------------
请问高手是什么原因?(如果没有使用动态数组类型,这个方法是可以的)


drop table Varr_test;
CREATE TYPE varrayf_9 AS VARRAY(9) OF float;
CREATE TABLE Varr_test
(
NUM_INDEX number NOT NULL,
TEXT varchar2(128),
NUMBER_OPT varrayf_9
);


程序如下:


OStartup();
oresult oRes ; // oRes is oresult
OSession m_o_Session; // 会话句柄
ODatabase m_o_db; // 数据库实例

oRes = m_o_Session.Open();
oRes = m_o_db.Open(m_o_Session,"oraDemet","system","myora"); // m_o_db is ODatabase
oRes = m_o_db.BeginTrans();
// the insert proccess
// Add Params
OParameterCollection oParamCol = m_o_db.GetParameters();
OParamArray o_NUM_INDEX_Ary = oParamCol.AddTable("B_NUM_INDEX",OPARAMETER_INVAR,OTYPE_NUMBER,10);
OParamArray o_TEXT_Ary = oParamCol.AddTable("B_TEXT",OPARAMETER_INVAR,OTYPE_VARCHAR2,10,250);
OParamArray o_NUMBER_OPT_Ary = oParamCol.AddTable("B_NUMBER_OPT",OPARAMETER_INVAR,OTYPE_VARRAY,10);
OCollection otest;
for(int i =0;i<10;i++){
o_NUM_INDEX_Ary.SetValue(i,i);
o_TEXT_Ary.SetValue("test",i);
otest.Open(m_o_db,"varrayf_9");
for(int j=0;j<9;j++)
{
otest.SetValue(j+1,j+1);
if (oRes != OSUCCESS)
{ // couldn’t create the table
AfxMessageBox(m_o_db.GetErrorText());
}

}

o_NUMBER_OPT_Ary.SetValue(otest,i);
}

oRes = m_o_db.ExecuteSQL("INSERT INTO Varr_test (NUM_INDEX,TEXT,NUMBER_OPT) VALUES (:B_NUM_INDEX,:B_TEXT,:B_NUMBER_OPT)");
if (oRes != OSUCCESS)
{ // couldn’t create the table
AfxMessageBox(m_o_db.GetErrorText());
}

oParamCol.Remove("B_NUM_INDEX");
oParamCol.Remove("B_TEXT");
oParamCol.Remove("B_NUMBER_OPT");

oRes = m_o_db.CommitTrans();
oRes = m_o_db.Close();
m_o_Session.Close();
OShutdown();
...全文
75 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2009-02-19
  • 打赏
  • 举报
回复
这么多代码看都晕了,帮UP!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧