я ожидаю получить такое же количество файлов, как таблицы в списке таблиц
В этом случае вам нужно открыть отдельный файл для каждой таблицы.
Кроме того, вы должны быть согласованы с именами переменных (archivo
|archive
, cur2
|micursor
). Обычно лучше давать переменным осмысленные имена, отражающие их использование. Слишком легко спутать var1
и var2
.
Я думаю, вы хотите, чтобы содержимое файлов было заключено в кавычки. Я использовал двойные кавычки, что является стандартом для формата CSV.
Этот код определяет тип записи PL/SQL, tgt_rec
, с проекцией, которая соответствует проекции строки запроса. Мы открываем курсор динамической ссылки, затем в цикле извлекаем записи в эту переменную записи, пока курсор не будет исчерпан.
declare
file_handle utl_file.file_type;
rc sys_refcursor;
cursor cur_tables is
select table_name from list_of_tables;
type tgt_rec is record ( skuid number, cmrprice number);
l_rec tgt_rec;
begin
<< tables >>
for i in cur_tables loop
file_handle := utl_file.fopen('test_path', i.table_name||'.csv','w');
open rc for 'select skuid, cmrprice from '||i.table_name;
<< table_rows >>
loop
fetch rc into l_rec;
exit when rc%not found;
utl_file.put_line(file_handle, '"'||l_rec.skuid||'","'|| l_rec.cmrprice||'"');
end loop table_rows;
utl_file.fclose(file_handle);
close rc;
end loop tables;
end;
/
Вам могут не понравиться косметические изменения, которые я внес в вашу программу (например, .csv
для расширений файлов), и, очевидно, вы можете отменить их. В конце концов, вы — Джозайя Споуд своего исполняемого кода.
«Вы не знаете, могу ли я распечатать результат двух сценариев, используя одну и ту же структуру кода?»
Это зависит. Вы можете преобразовать этот анонимный блок в процедуру и передать строку запроса — 'select skuid, cmrprice from '
— в качестве параметра. Это позволит вам варьировать выполняемый запрос. Однако вам все равно нужно извлечь набор результатов во что-то, и это что-то должно соответствовать структуре проекции: такое же количество столбцов и тот же тип данных. Так что это ограничивает вашу гибкость.
К счастью, PL/SQL — правильный язык программирования с множеством возможностей (хотя и не в стиле Java Reflection). Таким образом, у вас есть возможность написать какой-нибудь серьезно модульный набор программ с подпрограммами для общих вещей, таких как обработка файлов, и подпрограммами для обработки данных, специфичных для запроса.
person
APC
schedule
03.08.2019
SKUID, CMRPRICE
. Итак, существуют ли эти столбцы в каждой таблице? - person Popeye   schedule 03.08.2019when others then dbms_output.put_line( dbms_utility.format_error_stack ); dbms_output.put_line( dbms_utility.format_error_backtrace );
непосредственно передEND;
, указанным внизу. - person Barbaros Özhan   schedule 03.08.2019MICURSOR
? Вы открываете и закрываете динамический курсорvar1
, но не извлекаете из него данные. - person William Robertson   schedule 03.08.2019