Oracle sqlplus按列显示
正文
PostgreSQL
的psql
客户端提供\x
元命令,可以按列(扩展)显示查询结果,例如:
- snippet.sql
postgres=# SELECT * FROM aot; slot_time | slot_count | event | event_count | event_rate -----------+------------+---------+-------------+------------ 21:00:00 | 3 | Event 1 | 2 | 33.33 21:01:00 | 4 | Event 1 | 4 | 33.34 (2 ROWS) # 切换到扩展显示模式 seaboxsql=# \x Expanded display IS ON. seaboxsql=# SELECT * FROM aot; -[ RECORD 1 ]--------- slot_time | 21:00:00 slot_count | 3 event | Event 1 event_count | 2 event_rate | 33.33 -[ RECORD 2 ]--------- slot_time | 21:01:00 slot_count | 4 event | Event 1 event_count | 4 event_rate | 33.34
同样地,MySQL
客户端也提供\G
类似元命令。
然而,Oracle
的sqlplus
没有提供此种显示模式。我们可以通过间接方式实现。
定义一个过程:
- snippet.sql
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 EXECUTE immediate 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss'' '; 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; EXECUTE immediate 'alter session set nls_date_format=''dd-MON-rr'' '; exception WHEN others THEN EXECUTE immediate 'alter session set nls_date_format=''dd-MON-rr'' '; raise; END; /
使用过程:
- snippet.sql
SQL> SET serveroutput ON; SQL> EXEC print_table('select * from v$database'); DBID : 2867884909 NAME : ORCLCDB CREATED : 2022-02-16 17:12:13 RESETLOGS_CHANGE# : 1920977 RESETLOGS_TIME : 2022-02-16 17:12:16 PRIOR_RESETLOGS_CHANGE# : 1 …… ----------------- PL/SQL PROCEDURE successfully completed.
参考
打赏作者以资鼓励:
![]() | ![]() |