Если у вас есть дамп, созданный с помощью sqlplus, и вывод искажен, поскольку кто-то ранее не устанавливал эти 3 значения, выход есть.
Всего пару часов назад администратор БД отправил мне этот ужасно выглядящий вывод запроса, выполненного в sqlplus (я не знаю, может, он меня ненавидит ...). Я должен был найти выход: это скрипт awk для анализа этого вывода, чтобы сделать его как минимум более читабельным. Это далеко не идеально, но у меня не было достаточно времени, чтобы отполировать его должным образом. Во всяком случае, это делает работу довольно хорошо.
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}'
Если кто-то еще захочет попробовать улучшить этот скрипт, ниже приведены переменные:
hnames - имена столбцов в заголовке, hdash - разбито под заголовком, h - разбираю ли я в данный момент заголовок (тогда == 1), val - данные, _d -
- переключаться между hnames и hdash, ln0 - чтение последней строки, ln1 - чтение строки ранее (это та, с которой я на самом деле работаю), ln2 - чтение строки перед ln1
Удачного разбора!
О, почти забыл ... Я использую это для саморегуляции вывода sqlplus:
[oracle@ora ~]$ cat prettify_sql
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "
colsep не обязателен, но он делает вывод похожим на sqlite, который легче анализировать с помощью скриптов.
EDIT:
Небольшой предварительный просмотр разобранного и непарсированного вывода