Print table

EXEM Knowledge Base

Jump to: navigation, 찾기

print_table은 Tom Kyte(http://asktom.oracle.com)이 만든 Procedure로 Query의 출력 결과를 가로 포맷이 아닌 세로 포맷으로 보여준다.

Procedure 소스는 아래와 같다.

create or replace procedure print_table( p_query in varchar2 )
AUTHID CURRENT_USER
is
    l_theCursor     integer default dbms_sql.open_cursor;
    l_columnValue   varchar2(4000);
    l_status        integer;
    l_descTbl       dbms_sql.desc_tab;
    l_colCnt        number;
begin
      dbms_sql.parse(  l_theCursor,  p_query, dbms_sql.native );
    dbms_sql.describe_columns
    ( l_theCursor, l_colCnt, l_descTbl );

    for i in 1 .. l_colCnt loop
        dbms_sql.define_column
        (l_theCursor, i, l_columnValue, 4000);
    end loop;

    l_status := dbms_sql.execute(l_theCursor);

    while ( dbms_sql.fetch_rows(l_theCursor) > 0 ) loop
        for i in 1 .. l_colCnt loop
            dbms_sql.column_value
            ( l_theCursor, i, l_columnValue );
            dbms_output.put_line
            ( rpad( l_descTbl(i).col_name, 30 )
              || ': ' ||
              l_columnValue );
        end loop;
        dbms_output.put_line( '-----------------' );
    end loop;
exception
    when others then
     raise;
end;
/

실행 예제는 다음과 같다.

SQL> set serveroutput on
SQL> exec print_table('select * from dba_part_indexes where index_name = ''PARTI
 TION_TABLE_IDX''');
OWNER                         : OWI
INDEX_NAME                    : PARTITION_TABLE_IDX
TABLE_NAME                    : PARTITION_TABLE
PARTITIONING_TYPE             : HASH
SUBPARTITIONING_TYPE          : NONE
PARTITION_COUNT               : 8
DEF_SUBPARTITION_COUNT        : 0
PARTITIONING_KEY_COUNT        : 1
SUBPARTITIONING_KEY_COUNT     : 0
LOCALITY                      : LOCAL
ALIGNMENT                     : PREFIXED
DEF_TABLESPACE_NAME           :
DEF_PCT_FREE                  : 10
DEF_INI_TRANS                 : 2
DEF_MAX_TRANS                 : 255
DEF_INITIAL_EXTENT            : DEFAULT
DEF_NEXT_EXTENT               : DEFAULT
DEF_MIN_EXTENTS               : DEFAULT
DEF_MAX_EXTENTS               : DEFAULT
DEF_PCT_INCREASE              : DEFAULT
DEF_FREELISTS                 : 0
DEF_FREELIST_GROUPS           : 0
DEF_LOGGING                   : NONE
DEF_BUFFER_POOL               : DEFAULT
DEF_PARAMETERS                :
-----------------