Генерация CSV из процедуры PLSQL

Я попытался создать файл CSV с помощью PLSQL, и все получилось. Я хочу знать, как включить заголовок для каждого столбца.

Код;

CREATE OR REPLACE PROCEDURE EMP_CSV_EX AS
 
  CURSOR c_data IS
    SELECT a.empno,
           a.ename,
           a.job,
           a.mgr,
           TO_CHAR(a.hiredate,'DD-MON-YYYY') AS hiredate,
           a.sal,
           a.comm,
           b.deptno
    FROM   emp a,dept b
    where a.deptno = b.deptno
    ORDER BY b.deptno;
    
  v_file  UTL_FILE.FILE_TYPE;
  
  v_deptno varchar2(100);
BEGIN
 v_file := UTL_FILE.FOPEN('TEMP_DIR', 'shagar_test.csv', 'W');
  FOR cur_rec IN c_data LOOP
    
    UTL_FILE.PUT_LINE(v_file,
                      cur_rec.empno    || ',' ||
                      cur_rec.ename    || ',' ||
                      cur_rec.job      || ',' ||
                      cur_rec.mgr      || ',' ||
                      cur_rec.hiredate || ',' ||
                      cur_rec.empno    || ',' ||
                      cur_rec.sal      || ',' ||
                      cur_rec.comm     || ',' ||
                      cur_rec.deptno);
  END LOOP;
  UTL_FILE.FCLOSE(v_file);
  
    exception
  WHEN OTHERS THEN
    UTL_FILE.FCLOSE(v_file);
    RAISE;
END;
/

Текущий выход
введите сюда описание изображения

Ожидаемый результат

введите сюда описание изображения

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

T.S. 20.06.2024 15:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто добавьте новую строку, прежде чем перебирать данные.

-- Write the header line
UTL_FILE.PUT_LINE(v_file, 'EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO');

Таким образом, все ваше определение процедуры будет таким:

CREATE OR REPLACE PROCEDURE EMP_CSV_EX AS
  CURSOR c_data IS
    SELECT a.empno,
           a.ename,
           a.job,
           a.mgr,
           TO_CHAR(a.hiredate,'DD-MON-YYYY') AS hiredate,
           a.sal,
           a.comm,
           b.deptno
    FROM   emp a, dept b
    WHERE  a.deptno = b.deptno
    ORDER BY b.deptno;
    
  v_file  UTL_FILE.FILE_TYPE;

BEGIN
  v_file := UTL_FILE.FOPEN('TEMP_DIR', 'shagar_test.csv', 'W');
  
  -- Write the header line
  UTL_FILE.PUT_LINE(v_file, 'EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO');
  
  FOR cur_rec IN c_data LOOP
    UTL_FILE.PUT_LINE(v_file,
                      cur_rec.empno    || ',' ||
                      cur_rec.ename    || ',' ||
                      cur_rec.job      || ',' ||
                      cur_rec.mgr      || ',' ||
                      cur_rec.hiredate || ',' ||
                      cur_rec.sal      || ',' ||
                      cur_rec.comm     || ',' ||
                      cur_rec.deptno);
  END LOOP;
  
  UTL_FILE.FCLOSE(v_file);
  
EXCEPTION
  WHEN OTHERS THEN
    IF UTL_FILE.IS_OPEN(v_file) THEN
      UTL_FILE.FCLOSE(v_file);
    END IF;
    RAISE;
END;
/

если возможно отобразить результаты по группам по отделам? Пример № отдела 10 EMP_NO EMP_NAME JOB 20 EMP_NO EMP_NAME JOB

Shagar Mahabubjan 20.06.2024 21:02

Другие вопросы по теме