programing

plsql에서 익명 블록을 사용하여 표 전체를 인쇄하는 방법?

javajsp 2023. 10. 1. 19:17

plsql에서 익명 블록을 사용하여 표 전체를 인쇄하는 방법?

사용하고싶습니다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;
        /

이를 통해 다음과 같은 도움이 됩니다.

BEGIN    
  FOR MY_CURSOR IN (SELECT COLUMN1,COLUMN2,COLUMN3 FROM MY_TABLE) 
  LOOP
    DBMS_OUTPUT.PUT_LINE('COLUMN1 = ' || MY_CURSOR.COLUMN1 ||', 
                          COLUMN2 = ' || MY_CURSOR.COLUMN2 ||',
                          COLUMN3 = ' || MY_CURSOR.COLUMN3);
  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과 함께 gotchas가 몇 개 있으니 설명서를 읽어보세요.

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에서 스풀링하려면 더 쉬운 옵션을 사용하는 것이 어떨까요?

언급URL : https://stackoverflow.com/questions/2348319/how-to-print-out-the-whole-table-using-anonymous-block-in-pl-sql