#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