簡體   English   中英

如何在Oracle中將大表導出/后台處理到文件

[英]How to export/spool large table to file in Oracle

在Oracle中將大表(4300萬條記錄)導出/假脫機到單個文件的便捷方法是什么?

(一旦獲得導出的文件,其目的是使用kshell在Solaris中運行的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;

您可以借助SSIS包輕松地完成操作。

在此處檢查鏈接。

您可以將結果集導出到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"
 */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM