通过 odp.net 通过 dblink 大小限制插入 blob
我正在使用 ODP.NET(版本 2.111.7.0)和 C#、OracleCommand & OracleParameter 对象和 OracleCommand.ExecuteNonQuery 方法
我想知道是否有一种方法可以通过 DB 链接将大字节数组插入到驻留在另一个数据库中的 oracle 表中。我知道通过数据库链接进行 lob 处理通常是有问题的,但我对修改代码和添加另一个连接有点犹豫。
创建一个以 blob 作为参数并通过 dblink 进行内部对话的存储过程会有什么不同吗?不这么认为..
我目前的情况是,只要我通过 OracleCommand 传递的参数是长度为 0 或长度 > 的字节数组,Oracle 就会给我“ORA-22992:无法使用从远程表中选择的 LOB 定位器” ; 32KB(我怀疑,因为 20KB 有效,35KB 无效)
我使用 OracleDbType.Blob 作为此参数。
谢谢。
有什么想法吗?
i am using ODP.NET (version 2.111.7.0) and C#, OracleCommand & OracleParameter objects and OracleCommand.ExecuteNonQuery method
i was wondering if there is a way to insert a big byte array into an oracle table that resides in another database, through DB link. i know that lob handling through DB links is problematic in general, but i am a bit hesitant to modify code and add another connection.
will creating a stored procedure that takes blob as parameter and talks internally via dblink make any difference? don't think so..
my current situation is that Oracle will give me "ORA-22992: cannot use LOB locators selected from remote tables" whenever the parameter i pass with the OracleCommand is a byte array with length 0, or with length > 32KB (i suspect, because 20KB worked, 35KB didn't)
I am using OracleDbType.Blob for this parameter.
thank you.
any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我最终使用了第二个连接,同步两个事务,以便提交和回滚始终联合执行。我实际上还相信通过 dblink 处理 BLOB 存在一个普遍问题,因此第二个连接是更好的选择,尽管在我的情况下,我的应用程序的设计略有破坏 - 需要引入第二个连接和第二个连接交易。另一种选择是尝试使用 PL/SQL 块和某种形式的 DBMS_LOB.WRITEAPPEND 以 32k 块的形式插入 blob,但这需要对我的代码进行更深入的更改(就我而言),因此我选择了更简单的方法第一个解决方案更简单。
i ended up using a second connection, synchronizing the two transactions so that commits and rollbacks are always performed jointly. i also ended up actually believing that there's a general issue with handling BLOBs through a dblink, so a second connection was a better choice, although in my case the design of my application was slightly disrupted - needed to introduce both a second connection and a second transaction. other option was to try and insert the blob in chunks of 32k, using PL/SQL blocks and some form of DBMS_LOB.WRITEAPPEND, but this would require more deep changes in my code (in my case), therefore i opted for the easier and more straightforward first solution.