2017.12.20
Print table
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 : -----------------
