Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 有没有办法将包含大CLOB条目的表导出到平面文件?_Oracle_Export_Oracle Sqldeveloper - Fatal编程技术网

Oracle 有没有办法将包含大CLOB条目的表导出到平面文件?

Oracle 有没有办法将包含大CLOB条目的表导出到平面文件?,oracle,export,oracle-sqldeveloper,Oracle,Export,Oracle Sqldeveloper,我正在尝试从包含CLOB数据的Oracle 10g数据库导出表。有些条目由大型文本字段组成,在我的例子中,具体地说是xml文件。当试图将这样的表导出到平面文件时,CLOB中的数据会被截断约4000字节 我一直尝试使用的导出表的方法是SQL Developer中的“导出数据库”工具,该工具使用不同的设置导出为多种平面文件格式(csv、tsv、dsv文件…)。但是,似乎有一些缓冲区(或类似缓冲区)限制了数据大小并截断了所有测试格式的数据 有人知道这是不是真的吗?我还没有找到任何这样的设置(至少现在还

我正在尝试从包含CLOB数据的Oracle 10g数据库导出表。有些条目由大型文本字段组成,在我的例子中,具体地说是xml文件。当试图将这样的表导出到平面文件时,CLOB中的数据会被截断约4000字节

我一直尝试使用的导出表的方法是SQL Developer中的“导出数据库”工具,该工具使用不同的设置导出为多种平面文件格式(csv、tsv、dsv文件…)。但是,似乎有一些缓冲区(或类似缓冲区)限制了数据大小并截断了所有测试格式的数据

有人知道这是不是真的吗?我还没有找到任何这样的设置(至少现在还没有)。或者该方法是否能够导出此类数据

作为参考,它成功地导出了我最大的表(不包括CLOB),大约有300行,结果文件大小约为12GB

此导出的原因是将数据移动到MSSQL数据库,并使用批量插入方法将其导入该数据库。在Oracle和MSSQL中,数据库模式结构是相同的(由我们使用的支持两种DB系统的应用程序(Teamcenter)创建)

任何提示/建议都是受欢迎的,如果有其他方式需要调查,建议是最受欢迎的

编辑(2020年3月17日)-对于处于相同情况的其他人:
根据@MT0的良好反馈,将我的解决方案发布为答案(最好迟一点,不要)

最新版本的SQL Developer应以可转换为SQL Server的方式导出数据。我有一个表T,其中一行包含一个大clob,当我要求SQLDeveloper将其导出为insert语句时,生成的文件如下所示

Insert into EXPORT_TABLE (X,Y) values (1,
   TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
...
...
);

我不知道SQL Server,但我想它可以转换成SQL Server可以理解的东西?

我设法解决了这个问题,方法是将表导出为xml格式,并将该文件转换为.tsv文件,然后使用一个小脚本导入MSSQL。Had必须跟踪.tsv文件中的字段终止符和行终止符,因为MSSQL中的大容量INSERT语句更喜欢这些参数,并且它们需要保持一致。

以下是内容。如果数据库结构相同,请尝试使用数据泵的最小代码进行数据库链接。问题可能不是文件的总大小,而是在导出期间,
CLOB
正在转换为
VARCHAR2
,并且
VARCHAR2
的限制为4000字节。一种方法是从Oracle内部创建到MSSQL数据库的数据库链接(反之亦然),并绕过SQL Developer的导出,将数据推(或拉)到该链接上。@MT0;关于VARCHAR2转换,您可能是对的。我对导出格式做了更多的研究,将数据导出到.xml文件对于导出(我无法解释原因),然后将其转换为.tsv文件以导入MSSQL来说似乎效果不错。有点麻烦,但需要这种方法的表格不太多。@eak很高兴你解决了它,但请不要将答案编辑到你的问题中。相反,你应该为你自己的问题创建一个新的答案,并在其中包含你的解决方案。您甚至可以接受自己的答案作为首选解决方案。在我的测试中,export as insert语句实际上删除了包含CLOB数据的列。可能需要更多的调查,但我现在使用xml导出解决了这个问题。(Y)