通过cx_Oracle将长字符串数组(>4000字节)传递给Oracle(11gR2)存储过程
我们需要用cx_Oracle一次性加载很多很长的字符串(大于4000字节,但小于10000字节)。在数据库表中,这种数据类型是CLOB。我们需要加载超过一亿个这样的字符串。如果一个一个地加载,那可真是太麻烦了。理想的做法是批量加载,也就是使用cursor.arrayvar()。不过,CLOB不支持数组。BLOB、LOB、LONG_STRING和LONG_RAW这些类型也都不支持。任何帮助都会非常感激。
2 个回答
0
这是个有点奇怪的建议,不过既然你在用11gR2,可以看看DBFS。从“加载”的角度来看,你只是在复制文件,它们会“显示”为LOB(大对象)。你也可以用内置的FTP服务器做类似的事情,但处理文件会简单很多。
然后你只需要写一个过程,从dbfs_content视图中提取文件,并把它们传递给你的过程。
另外,如果文件都小于12,000字节,可以把它们分成三部分,作为三个独立的VARCHAR2(4000)字符串来处理,然后在PL/SQL那边再把它们合并起来。
0
为了快速完成一些足够好的工作,我们使用了我在评论中提到的CLOB(字符大对象)这个方法。编写代码花了不到30分钟,运行速度快,而且效果不错。