问题描述
是否可以将XmlDocument或XElement的数组从应用层(c#)发送到包(oracle18c) ,以获得XMLTYPE的表?我有一个文档的集合,这些文档需要被存储,然后解析并与数据库中的记录进行比较。通过网络将单个文档保存到数据库是低效和缓慢的,所以我试图将集合从应用程序层完整地发送到数据库。此外,文档非常大,超过32767个字符。或者还有其他更好的方法吗?
以下不成功的代码将给我ORA-03120 :双任务转换例程:整数溢出。
创建表schema_Hort.t1 (
id原始(16) default sys_guid()不为空,
dt导入日期默认系统日期不为空,
已处理的数字(1, 0)默认值0不为空,
xmldoc xmltype)
xmltype xmldoc存储为二进制xml
表空间模式-所有者-数据;
创建或替换包模式为
类型T_ASSOCIARE_RARY是PLS_INTEGER的XMLTYPE索引表;
过程加载数据(文档t_asionive_ream ) ;
结束;
创建或替换包主体架构-拥有者.pkg_event_data
过程加载数据(文档t_as关联_阵列)是
开始
对于所有i在文档中。first..文档. last
插入到xmldoc的值(文档(i ) )中;
结束;
结束;
公共异步任务SaveBlobCollection (ILlist文档)
{
使用( var command =连接。创建命令( ) )
{
尝试
{
等待command.Connection.OpenAsync() ;
}
捕获(例外除外)
{
控制台。写行(例如消息) ;
}
var Parm = command.parameters.Add ( "blobcol", OracleDbType.XmlType) ;
Parm.CollectionType = OracleCollectionType.PLSQLAssocativeArray ;
var arr = new XElement[docs.count] ;
用于( var索引= 0 ;索引< arr.Length;index++ ) arr[index] = docs[index] ;
值= arr ;
command.CommandType = System.Data.CommandType.StoragedProcedure ;
command.CommandText = "schema_Hall.pkg_event_data.load_data" ;
尝试
{
command.ExecuteNonQuery() ;
}捕获(例外除外)
{
控制台。写线(ex.message) ;
}
}
}
谢谢!
以下不成功的代码将给我ORA-03120 :双任务转换例程:整数溢出。
创建表schema_Hort.t1 (
id原始(16) default sys_guid()不为空,
dt导入日期默认系统日期不为空,
已处理的数字(1, 0)默认值0不为空,
xmldoc xmltype)
xmltype xmldoc存储为二进制xml
表空间模式-所有者-数据;
创建或替换包模式为
类型T_ASSOCIARE_RARY是PLS_INTEGER的XMLTYPE索引表;
过程加载数据(文档t_asionive_ream ) ;
结束;
创建或替换包主体架构-拥有者.pkg_event_data
过程加载数据(文档t_as关联_阵列)是
开始
对于所有i在文档中。first..文档. last
插入到xmldoc的值(文档(i ) )中;
结束;
结束;
公共异步任务SaveBlobCollection (ILlist文档)
{
使用( var command =连接。创建命令( ) )
{
尝试
{
等待command.Connection.OpenAsync() ;
}
捕获(例外除外)
{
控制台。写行(例如消息) ;
}
var Parm = command.parameters.Add ( "blobcol", OracleDbType.XmlType) ;
Parm.CollectionType = OracleCollectionType.PLSQLAssocativeArray ;
var arr = new XElement[docs.count] ;
用于( var索引= 0 ;索引< arr.Length;index++ ) arr[index] = docs[index] ;
值= arr ;
command.CommandType = System.Data.CommandType.StoragedProcedure ;
command.CommandText = "schema_Hall.pkg_event_data.load_data" ;
尝试
{
command.ExecuteNonQuery() ;
}捕获(例外除外)
{
控制台。写线(ex.message) ;
}
}
}
谢谢!
专家解答
不能用参数数组绑定或关联数组绑定XMLTYPE。我能想到的唯一选项是使用带有CLOB的BulkCopy来存储XML文档。BulkCopy现在可用于非托管的ODP.NET ,而下一个数据库发行版将可用于托管的ODP.NET。
文章转载自askTom,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。