Я хочу использовать DBMS_OUTPUT.PUT_LINE
, но количество строк превышает всего 1. Нет ничего в таблице, которая увеличивает последовательно, таким образом, я не могу использовать цикл. Там некоторый путь состоит в том, чтобы распечатать каждую строку в таблице?
попробуйте что-нибудь вроде этого.
SET SERVEROUTPUT ON
BEGIN
-- A PL/SQL cursor
FOR cursor1 IN (SELECT * FROM table1)
LOOP
DBMS_OUTPUT.PUT_LINE('Column 1 = ' || cursor1.column1 ||
', Column 2 = ' || cursor1.column2);
END LOOP;
END;
/
Самый быстрый и самый грязный способ сделать это - использовать SQL * Plus:
SQL> set lines 200
SQL> set heading off
SQL> set feedback off
SQL> spool $HOME/your_table.out
SQL> select * from your_table;
SQL> spool off
SQL * Plus имеет некоторые изящные базовые функции отчетности; мы можем даже генерировать файлы HTML .
Если у вас очень длинная таблица (много строк) или широкая (много столбцов), вам может быть лучше вывести ее непосредственно в файл, как это.
declare
fh utl_file.file_type;
begin
fh := utl_file.fopen('TARGET_DIRECTORY', 'your_table.lst', 'W');
for lrec in ( select * from your_table )
loop
utl_file.put( fh, id );
utl_file.put( fh, '::' );
utl_file.put( fh, col_1 );
utl_file.put( fh, '::' );
utl_file.put( fh, col_2 );
utl_file.put( fh, '::' );
utl_file.put( fh, to_char ( col_3, 'dd-mm-yyyy hh24:mi:ss' ) );
utl_file.new_line(fh);
end loop;
utl_file.fclose(fh);
end;
/
Это может выглядеть как рутинная работа, но вызовы PUT () могут быть сгенерированы из USER_TAB_COLUMNS. С UTL_FILE есть несколько ошибок, поэтому прочтите документацию .
Вы могли бы использовать ту же структуру управления с DBMS_OUTPUT ....
begin
for lrec in ( select * from your_table )
loop
dbms_output.put( id );
dbms_output.put( '::' );
dbms_output.put( col_1 );
dbms_output.put( '::' );
dbms_output.put( col_2 );
dbms_output.put( '::' );
dbms_output.put( to_char ( col_3, 'dd-mm-yyyy hh24:mi:ss' ) );
dbms_output.new_line;
end loop;
end;
/
... но если вы собираетесь выполнить спулинг из SQL * Plus, почему бы не использовать более простой вариант?