
Print Table - 日本エクセム株式会社 Oracle 技術情報
基本情報
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 :
-----------------