Нужны идеи по выводу табличных данных в CSV с использованием PL/SQL динамически

Задача состоит в том, чтобы взять список таблиц, который является изменяемым.

Напишите часть PL/SQL, которая при выполнении выводит каждую таблицу строк в отдельные файлы csv.

Так что если 5 таблиц. Вы получите 5 файлов CSV с соответствующими данными таблицы.

CSV должен быть | ограничены и имеют «вокруг каждого значения (для удобства импорта)

Все, что я знаю, это список таблиц.

Поэтому загрузите список в массив в верхней части процедуры, пропустите этот список и используйте UTL_FILE для вывода каждой строки в строке за строкой.

Я чучел, задаваясь вопросом, нужен ли мне указатель на таблицу или если курсор можно использовать динамически для хранения результатов из каждой таблицы.

постскриптум каждый файл также должен содержать заголовки столбцов в качестве первой строки.

Возможно ли это? Список из более чем 30 таблиц, некоторые из таблиц имеют более 200 столбцов.

Поэтому идеи нравятся :).

Я медленно думаю, что это невозможно. так как мне нужен динамический SQL, который может собрать все имена столбцов и т. д. Я становлюсь увязшим!

Это не может быть сценарий SQL и просто буферизация вывода. Все, что мы хотим сделать, это добавить или удалить таблицы из объявления массива.

0

2 ответы

Да, это возможно. Посмотрите на это Спросите у Tom вопрос, который показывает, как это сделать для 1 таблицы за раз. Все, что вам нужно сделать, - это цикл через массив имен таблиц и вызов процедуры Тома для каждого.

0
добавлено
ASKTOM - хорошее место для начала
добавлено автор EvilTeach, источник

Есть несколько вариантов.

  1. Вы можете использовать UTL_FILE, чтобы вывести предварительно отформатированные текстовые строки в файлы. Просто создайте курсор, который выводит все столбцы данных, объединенные с разделителями.

Что-то вроде этого:

DECLARE
  TYPE IDCurTyp IS REF CURSOR;
  fo            UTL_FILE.FILE_TYPE;
  varRow        VARCHAR2(4000);
  cur_output    IDCurTyp;
BEGIN
  fo := UTL_FILE.FOPEN('BILLING_DIR','BillingFile1.csv', 'W', 2000)
  OPEN cur_output FOR
    'SELECT ''"'' || t1.col1 || ''",'' || t1.col2 || ''","'' || t1.col2 || ''"'' FROM t1'
  LOOP
    FETCH cur_output INTO varRow;
    EXIT WHEN cur_output%NOTFOUND;
    UTL_FILE.putf( fo, '%s\n', varRow );
  END LOOP;

  CLOSE cur_output;

  UTL_FILE.FCLOSE( fo );
END:
  1. Вместо предварительно отформатированного текста создайте пакет, который принимает SQL-запрос, а затем использует пакет DBMS_SQL для его анализа и извлечения имен столбцов и т. д. и снова создайте текстовые строки для дампа с использованием UTL_FILE.
0
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Oracle RU
Oracle RU
303 участник(ов)

Русскоязычная группа по Oracle. — Архитектура СУБД — PL/SQL — Оптимизация — Администрирование — Вакансии Oracle (указать инфу по вилке ЗП и удалёнке) Приглашайте коллег :-) Запрещены: личные оскорбления, обсуждения оффтопик вопросов политики и религии