Как экспортировать данные из около 300 таблиц в ORACLE DB в CSV или TXT файлы - PullRequest
0 голосов
/ 20 февраля 2019

Есть ли возможность экспортировать данные из примерно 300 таблиц в одной схеме с миллионами записей в CSV или TXT, используя любую процедуру PL / SQL?

Что вы предлагаете, какой самый быстрый способ сделать это?На данный момент мне не нужно импортировать эти экспортированные файлы в любую другую схему ...

Я пытался с Toad вручную экспортировать таблицу за таблицей ...

Ответы [ 4 ]

0 голосов
/ 02 марта 2019

Процедура Data Dump полезна для программного экспорта многих таблиц в простые форматы, такие как CSV.

Сначала установите пакет, используя приведенную выше ссылку.Приведенный ниже код создает каталог, циклически перебирает таблицы и экспортирует каждую таблицу как CSV.

create or replace directory temp_dir as 'C:\temp';

begin
    for tables in
    (
        select
            owner||'_'||table_name||'.csv' file_name,
            'select * from "'||owner||'"."'||table_name||'"' v_sql
        from dba_tables
        where owner = 'XYZ'
            and table_name like 'XYZ%'
        order by 1
    ) loop
        data_dump
        (
            query_in        => tables.v_sql,
            file_in         => tables.file_name,
            directory_in    => 'TEMP_DIR',
            delimiter_in    => ',',
            header_row_in   => true
        );
    end loop;
end;
/
0 голосов
/ 20 февраля 2019

Я создал утилиту, с помощью которой вы можете создавать процедуры PL / SQL для экспорта данных из таблицы.Он будет принимать следующие параметры, имя таблицы, имена столбцов, имя каталога и разделитель.Вы можете создать 50 процедур для 50 таблиц в кратчайшие сроки для экспорта данных из Oracle.Проверьте эту ссылку Создание процедуры PL / SQL для экспорта данных в CSV

0 голосов
/ 22 февраля 2019

Мне удалось динамически просмотреть все таблицы, получить имена столбцов и записать в файл.Я борюсь в части, как извлечь строки данных из таблиц динамически при выполнении немедленного запроса?Как мне сохранить строки данных, а затем извлечь их и записать в файлы?Вот код:

DECLARE p_table        VARCHAR2 (100);
l_file UTL_FILE.FILE_TYPE;
l_string       VARCHAR2 (10000);
query_string   VARCHAR2 (4000);
BEGIN
FOR tab IN (SELECT *
             FROM dba_tables
            WHERE owner = 'XYZ' AND table_name LIKE 'XYZ%')
LOOP
  p_table := tab.table_name;

  l_file :=
     UTL_FILE.FOPEN ('my_path',
                     tab.table_name || '.txt',
                     'w',
                     10000);
  l_string := NULL;


  FOR col_he IN (SELECT *
                   FROM dba_tab_columns
                  WHERE owner = 'DWHCO' AND table_name = p_table)
  LOOP
     CASE
        WHEN l_string IS NULL
        THEN
           l_string := col_he.column_name;
        ELSE
           l_string := l_string || ',' || col_he.column_name;
     END CASE;
  END LOOP;

  UTL_FILE.PUT_LINE (l_file, l_string);            --Printng table columns

  query_string := 'select ' || l_string || ' from DWHCO.' || p_table      
  --Execute immediate query_string into ??????????;
        --??????
  UTL_FILE.FCLOSE (l_file);  END LOOP;END;
0 голосов
/ 20 февраля 2019

вы можете попробовать выполнить следующие шаги.

  1. написать цикл для получения имен таблиц
  2. использовать курсоры для извлечения данных из каждой таблицы
  3. используйте утилиты SYS.UTL_FILE для записи данных в файлы в любом необходимом формате.

Это решение очень высокого уровня.Но я уверен, что это сработает.

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