在Oracle中将大表(4300万条记录)导出/假脱机到单个文件的便捷方法是什么?
(一旦我们得到导出的文件,其目的是在Solaris中使用kshell运行的Shell脚本中处理它,但这是另一种历史记录)。
我们的第一次尝试生成了一个空文件:
SET NEWPAGE 0;
SET LINESIZE 169;
SET PAGESIZE 0;
SET VERIFY OFF;
SET TERMOUT OFF;
SET COLSEP '';
SET FEEDBACK OFF;
SET HEADING OFF;
SPOOL THE_MONSTER_FILE.txt;
SELECT
a.field1, a.field2, b.field1, b.field2
FROM
tableA a, tableB b,
WHERE
a.id = b.id(+);
SPOOL OFF;
COMMIT;
EXIT;
发布于 2018-06-03 03:28:18
可以将结果集导出到CSV文件中。创建一个shell脚本并让它在后台运行,如下所示:
#!/bin/bash
cat <<EOF > THE_MONSTER_SCRIPT.sql
SET COLSEP ;
SET HEADSEP OFF
SET VERIFY OFF
SET HEADING OFF
SET ECHO OFF
SET FEEDBACK OFF
SET LONG 2000000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIMSPOOL ON
SPOOL THE_MONSTER_FILE.csv;
SELECT
a.field1, a.field2, b.field1, b.field2
FROM
tableA a, tableB b,
WHERE
a.id = b.id(+);
SPOOL OFF
EXIT
EOF
nohup sqlplus system/password@INSTNAME @THE_MONSTER_SCRIPT.sql &
如果结果集中的任何列的值中都有列分隔符,则必须用双引号括起这些列,将列值中的双引号替换为两个双引号。示例:
/*
* ----------------
* | col1 | col2 |
* ----------------
* | a"a;a | aaa |
* | bbb;b | b"b |
* ----------------
*/
将会变成:
/*
* "a""a;a";"aaa"
* "bbb;b";"b""b"
*/
发布于 2018-06-01 15:52:17
在SSIS包的帮助下,您可以很容易做到这一点。
检查链接Here。
https://stackoverflow.com/questions/50638463
复制相似问题