问题
In Oracle's SQL*Plus, the results of a SELECT are displayed in a tabular manner. Is there a way to display a row in a key-value manner (like MySQL's \G option)?
The database I am working on (the schema is not defined by me) has a bunch of columns named e.g. YN_ENABLED
(YN = yes no) which are CHAR(1)
. So when I do a query I get a result like
ID_MYTABLE Y Y Y
------------ - - -
3445 Y N Y
So it's not really clear which columns have which values (without having the schema open in another window).
回答1:
Not built in to SQL PLus, but Tom Kyte has provided a procedure called print_table that does this. You would run it like this:
SQL> exec print_table ('select * from mytable where id_mytable=123');
And see results like:
ID_MYTABLE : 123
YN_ENABLED : Y
YN_SOMETHING : N
...
回答2:
I know your question is about SQL*PLus, but you might be interested to know that Oracle's SQL Developer can do this. The feature can be used by right clicking on the Query Results and selecting "Single Record View...".
回答3:
Here's a trick that may do in a pinch if you don't want to (or cannot) install a new procedure on your server:
- Select the row (or rows) of interest in the Oracle SQL Developer query results window.
- Use
shift-control-c
in Oracle SQL Developer to copy the rows and headers to the clipboard. - Paste into your favorite spreadsheet (e.g., MS Excel). Now you have records in rows.
- Copy the rows that you just pasted into the spreadsheet
- Use the "Paste Special - Transpose" feature of your spreadsheet program to paste the values into a new spreadsheet. Now your records should be in columns.
回答4:
Coming in late, but I found this
SQL> select * from xmltable('ROWSET/ROW/*' passing xmltype(cursor(select * from emp where rownum = 1
)) columns name varchar2(30) path 'node-name(.)', value varchar2(30) path '.');
Found here
来源:https://stackoverflow.com/questions/4193370/equivalent-of-mysqls-g-in-oracles-sqlplus