• 主页
  • Oracle 基础和管理
  • Oracle 高级技术
  • Oracle 认证与考试
  • 职位交流

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();
...全文
32 点赞 收藏 1
写回复
1 条回复
Andy__Huang 2009年02月19日
这么多代码看都晕了,帮UP!
回复 点赞
发动态
发帖子
Oracle
创建于2007-09-28

6414

社区成员

5.4w+

社区内容

Oracle开发相关技术讨论
社区公告
暂无公告