Как отображать данные таблицы более четко. в oracle sqlplus
Вот как sqlplus отображает мои данные таблицы:
alt text http://img683.imageshack.us/img683/5512/tabless.png
но я хочу показать их как
Name | Address |
-------+---------------+
name1 | address1 |
name2 | address2 |
name3 | address3 |
Ответы
Ответ 1
Обычно я начинаю с чего-то вроде:
set lines 256
set trimout on
set tab off
Посмотрите help set
, если у вас установлена справочная информация. А затем select name,address
, а не select *
, если вам действительно нужны только эти два столбца.
Ответ 2
Если вы хотите увидеть их так:
WORKPLACEID NAME ADDRESS TELEPHONE
----------- ---------- -------------- ---------
1 HSBC Nugegoda Road 43434
2 HNB Bank Colombo Road 223423
то в SQL Plus вы можете установить ширину столбца, как это (например):
column name format a10
column address format a20
column telephone format 999999999
Вы также можете указать размер строки и размер страницы, если необходимо:
set linesize 100 pagesize 50
Вы делаете это, введя эти команды в SQL Plus перед запуском запроса. Или вы можете поместить эти команды и запрос в файл script, например. myscript.sql и запустите это. Например:
column name format a10
column address format a20
column telephone format 999999999
select name, address, telephone
from mytable;
Ответ 3
Если у вас есть дамп, сделанный с sqlplus, и выход искажен, поскольку кто-то не задал эти 3 значения раньше, есть выход.
Всего пару часов назад администратор базы данных отправил мне этот уродливый вывод запроса, выполненный в sqlplus (я не знаю, может быть, он меня ненавидит...). Я должен был найти выход: это awk script для синтаксического анализа этого вывода, чтобы сделать его хотя бы более удобочитаемым. Это далеко не идеальное, но у меня не хватило времени, чтобы отполировать его должным образом. Во всяком случае, это хорошо работает.
awk ' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"\n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)} BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""} { addLn(); if(!isLoaded()){next}; l=1; if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}} }END{if(val!="")print val}'
Если кто-то еще захочет попытаться улучшить этот script, ниже перечислены переменные:
hnames - имена столбцов в заголовке, hdash - пунктир под заголовком, h - в настоящее время я разбираю заголовок (тогда == 1), val - данные, _d -
- для обмена между hnames и hdash, ln0 - чтение последней строки, ln1 - строка, прочитанная ранее (это та, на которой я фактически работаю), ln2 - строка, прочитанная до ln1
Счастливый разбор!
О, почти забыл... Я использую это для того, чтобы самостоятельно вывести вывод sqlplus:
[[email protected] ~]$ cat prettify_sql
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "
colsep является необязательным, но он делает вывод похожим на sqlite, который легче анализировать с помощью скриптов.
EDIT:
Небольшой предварительный просмотр разобранного и не обработанного вывода
![Небольшой предварительный просмотр разобранного и неанализируемого вывода]()