как распечатать целую таблицу с помощью анонимного блока в мн sql?

Я хочу использовать DBMS_OUTPUT.PUT_LINE, но количество строк превышает всего 1. Нет ничего в таблице, которая увеличивает последовательно, таким образом, я не могу использовать цикл. Там некоторый путь состоит в том, чтобы распечатать каждую строку в таблице?

6
задан OMG Ponies 28 February 2010 в 05:15
поделиться

2 ответа

попробуйте что-нибудь вроде этого.

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;
        /
14
ответ дан 8 December 2019 в 14:42
поделиться

Самый быстрый и самый грязный способ сделать это - использовать 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, почему бы не использовать более простой вариант?

2
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: