Создание CSV-файла с помощью запроса в PLSQL

#oracle #csv #plsql

Вопрос:

Я пытаюсь запросить таблицу и сгенерировать из нее CSV-файл с помощью PL/SQL. Я сделал это, но проблема в том, что некоторые значения в CSV-файле не упорядочиваются должным образом. Я вижу, что некоторые столбцы пропускаются и добавляются в новую строку, как в примере ниже. Я хочу, чтобы CSV-файл содержал по одной записи для каждой строки результатов. Может ли кто-нибудь помочь?

пример:

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

В приведенном выше примере вы можете видеть, что значения в файле заполнены неправильно. Некоторые столбцы пропускаются, и значения добавляются в следующую строку. Это происходит только с определенными строками, а остальные значения заполняются правильно.

Вот мой код для создания CSV-файла.

 DECLARE
    l_clob CLOB;
    l_attach_text VARCHAR2 (32767);
    l_attach_text_h VARCHAR2 (32767);
    FC_SV_STATUS_DESC VARCHAR2(200) := 'open';

    -- select query from table to get the values needed
    CURSOR c1 IS 
       select FC_ED_RECORD_ID,to_char(FC_ED_UPLOADTIME,'DD.MM.YY')FC_ED_UPLOADTIME,FC_ED_USER_ID ,FC_ED_BROKER,FC_ED_ACT_NUM,FC_ED_POLICY_NUM,FC_ED_AMOUNT,FC_ED_TRANS_TYPE,FC_ED_CURRENCY,to_char(FC_ED_DUE_DATE,'DD.MM.YY')FC_ED_DUE_DATE,FC_ED_SENDER_NAME,FC_ED_DESC,to_char(FC_ED_CREDIT_DATE,'DD.MM.YY')FC_ED_CREDIT_DATE from  MYTABLE where FC_ED_EXPCASH_STATUS = 1 ;   
    
BEGIN   
    -- csv file columns are these
    l_attach_text_h :=
    'FC_ED_RECORD_ID ,FC_ED_UPLOADTIME ,FC_ED_USER_ID ,FC_ED_BROKER ,FC_ED_ACT_NUM ,FC_ED_POLICY_NUM ,FC_ED_AMOUNT ,FC_SV_STATUS_DESC ,FC_ED_TRANS_TYPE ,FC_ED_CURRENCY ,FC_ED_DUE_DATE ,FC_ED_SENDER_NAME ,FC_ED_DESC ,FC_ED_CREDIT_DATE';   
    
    FOR employee_rec in c1    
    LOOP
        DBMS_OUTPUT.put_line('Before loop COUNT Boss ...'||c1%ROWCOUNT);
        -- each value is read using loop   
        l_attach_text :=                                  
        employee_rec.FC_ED_RECORD_ID ||','||
        employee_rec.FC_ED_UPLOADTIME ||','||
        employee_rec.FC_ED_USER_ID ||','||
        employee_rec.FC_ED_BROKER ||','||
        employee_rec.FC_ED_ACT_NUM ||','||
        employee_rec.FC_ED_POLICY_NUM ||','||
        employee_rec.FC_ED_AMOUNT ||','||
        FC_SV_STATUS_DESC ||','||
        employee_rec.FC_ED_TRANS_TYPE ||','||
        employee_rec.FC_ED_CURRENCY ||','||
        employee_rec.FC_ED_DUE_DATE ||','||
        employee_rec.FC_ED_SENDER_NAME ||','||
        employee_rec.FC_ED_DESC ||','||
        employee_rec.FC_ED_CREDIT_DATE ||chr(13);

        l_clob := l_clob || l_attach_text;    
    END LOOP;

    -- adding values
    l_clob := l_attach_text_h ||chr(13)|| l_clob;  
 

Это был мой код для создания csv-файла, который затем добавляется в качестве вложения в почту

Комментарии:

1. Вы можете использовать этот пакет для создания csv-файла из рефкурсора: williamrobertson.net/documents/refcursor-to-csv.shtml