Как экспортировать / буферизовать большую таблицу в файл в Oracle - PullRequest
0 голосов
/ 01 июня 2018

Каков удобный способ экспорта / буферизации большой таблицы (43 миллиона записей) в один файл в Oracle?

(Как только мы получим экспортированный файл, цель состоит в том, чтобы обработать его в запущенном сценарии оболочкив Solaris с kshell, но это другая история).

Наша первая попытка сгенерировала пустой файл:

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;

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Вы можете экспортировать набор результатов в файл CSV.Создайте сценарий оболочки и дайте ему работать в фоновом режиме, например:

#!/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"
 */
0 голосов
/ 01 июня 2018

Вы можете легко сделать это с помощью пакетов служб SSIS.

Проверить ссылку Здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...