Как создать файл .csv из данных таблицы оракула?

Я создал CSV-файл, используя приведенный ниже запрос, но все данные столбца поступают в один столбец в CSV-файле. Пожалуйста, помогите мне разделить данные этих столбцов.

create or replace procedure csv_generate as
CURSOR c1 is SELECT * FROM emp;
v1 c1%rowtype;
z1 VARCHAR2(2000);
z2 VARCHAR2(2000);
f1 utl_file.file_type;
BEGIN
FOR i IN c1
loop
--play(i.ename);
f1:=utl_file.fopen('TEST_DIR1','out.dbf','W');
z1:=i.empno||' '||i.ename||'    '||i.JOB||'   '||i.sal||'  '||i.deptno;
z2:=z2||chr(10)||z1;
utl_file.put_line(f1,z2);
utl_file.fclose(f1);
END loop;
--utl_file.put_line(f1,z2);
END;

person Alok    schedule 27.04.2017    source источник
comment
Вы используете пробелы в качестве разделителя; чтобы создать CSV, вы должны добавить разделитель, скажем, запятую, вместо пробелов. Кроме того, вы открываете и закрываете файл один раз на строку, в то время как вам лучше делать эти операции вне цикла. И даже, не конкатенируете ли вы слишком много содержимого в переменной z2?   -  person Aleksej    schedule 27.04.2017
comment
Ок спасибо Алексей. Но как получить данные ename во втором столбце csv   -  person Alok    schedule 27.04.2017
comment
Если вы используете пробелы в качестве разделителя, у вас всегда будет один столбец.   -  person Aleksej    schedule 27.04.2017
comment
Итак, что я должен использовать для разделения столбцов?   -  person Alok    schedule 27.04.2017
comment
Это зависит от вашего требования. Обычный разделитель — запятая, но вы можете использовать точку с запятой, вертикальную черту, что угодно.   -  person Aleksej    schedule 27.04.2017
comment
Да. Спасибо, чувак, это сработало.   -  person Alok    schedule 27.04.2017


Ответы (1)


запятая-разделитель работал.

create or replace procedure text_generate as
CURSOR c1 is SELECT * FROM emp;
v1 c1%rowtype;
z1 VARCHAR2(2000);
z2 VARCHAR2(2000);
f1 utl_file.file_type;
BEGIN
f1:=utl_file.fopen('TEST_DIR1','out.xls','W');
FOR I IN C1
loop
z1:=i.empno||','||i.ename||','||i.JOB||','||i.sal||','||i.deptno;
Z2:=Z2||CHR(10)||Z1;
END LOOP;
UTL_FILE.PUT_LINE(F1,Z2);
utl_file.fclose(f1);
END;
person Alok    schedule 27.04.2017