select d.piece piece,
decode(substr(upper(ltrim(sqltext,' ')),1,4),
'SELE', ltrim(sqltext,' '),
'FROM', ltrim(sqltext,' '),
'WHER', ltrim(sqltext,' '),
'ORDE', ltrim(sqltext,' '),
'GROU', ltrim(sqltext,' '),
'UNIO', ltrim(sqltext,' '),
'AND ', ltrim(sqltext,' '),
'EXPL', ltrim(sqltext,' '),
'(SEL', ltrim(sqltext,' '),
'UPDA', ltrim(sqltext,' '),
'DELE', ltrim(sqltext,' '),
' '||sqltext) sqltext
from (select a.piece, decode(b.sql1,' ','',b.sql1)||a.sql sqltext
from ( select piece,
decode(piece, last_piece, sql_text||';',
decode(instr(upper(sql_text),' FROM ',-1),0,
decode(instr(upper(sql_text),' WHERE ',-1),0,
decode(instr(upper(sql_text),' UNION ALL', -1),0,
decode(instr(upper(sql_text),' UNION ', -1),0,
decode(instr(upper(sql_text),' ORDER ',-1),0,
decode(instr(upper(sql_text),' GROUP ',-1),0,
decode(instr(sql_text,',',-1),0,
decode(instr(sql_text,' ',-1),0,
decode(instr(sql_text,')',-1),0, sql_text,
substr(sql_text,1,instr(upper(sql_text),')', -1))),
substr(sql_text,1,instr(upper(sql_text),' ',-1))),
substr(sql_text,1,instr(upper(sql_text),',',-1))),
substr(sql_text,1,instr(upper(sql_text),' GROUP ',-1))),
substr(sql_text,1,instr(upper(sql_text),' ORDER ',-1))),
substr(sql_text,1,instr(upper(sql_text),' UNION ALL',-1))),
substr(sql_text,1,instr(upper(sql_text),' UNION ',-1))),
substr(sql_text,1,instr(upper(sql_text),' WHERE ',-1))),
substr(sql_text,1,instr(upper(sql_text),' FROM ',-1)))) sql
from v$sqltext, (select max(piece) last_piece
from v$sqltext
where address='&&1') c
where address='&&1'
and piece=c.last_piece(+)) a,
( select piece + 1 tail_piece,
decode(instr(upper(sql_text),' FROM ',-1),0,
decode(instr(upper(sql_text),' WHERE ',-1),0,
decode(instr(upper(sql_text),' UNION ALL', -1),0,
decode(instr(upper(sql_text),' UNION ', -1),0,
decode(instr(upper(sql_text),' ORDER ',-1),0,
decode(instr(upper(sql_text),' GROUP ',-1),0,
decode(instr(upper(sql_text),',',-1),0,
decode(instr(upper(sql_text),' ',-1),0,
decode(instr(upper(sql_text),')',-1),0, sql_text,
substr(sql_text,instr(upper(sql_text),')', -1)+1)),
substr(sql_text,instr(upper(sql_text),' ', -1)+1)),
substr(sql_text,instr(upper(sql_text),',', -1)+1)),
substr(sql_text,instr(upper(sql_text),' GROUP ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' ORDER ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' UNION ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' UNION ALL',-1)+1)),
substr(sql_text,instr(upper(sql_text),' WHERE ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' FROM ',-1)+1)) as sql1
from v$sqltext ,(select max(piece) last_piece
from v$sqltext
where address='&&1') c
where address='&&1'
and piece!=c.last_piece) b
where a.piece=b.tail_piece(+) ) d
order by piece
decode(substr(upper(ltrim(sqltext,' ')),1,4),
'SELE', ltrim(sqltext,' '),
'FROM', ltrim(sqltext,' '),
'WHER', ltrim(sqltext,' '),
'ORDE', ltrim(sqltext,' '),
'GROU', ltrim(sqltext,' '),
'UNIO', ltrim(sqltext,' '),
'AND ', ltrim(sqltext,' '),
'EXPL', ltrim(sqltext,' '),
'(SEL', ltrim(sqltext,' '),
'UPDA', ltrim(sqltext,' '),
'DELE', ltrim(sqltext,' '),
' '||sqltext) sqltext
from (select a.piece, decode(b.sql1,' ','',b.sql1)||a.sql sqltext
from ( select piece,
decode(piece, last_piece, sql_text||';',
decode(instr(upper(sql_text),' FROM ',-1),0,
decode(instr(upper(sql_text),' WHERE ',-1),0,
decode(instr(upper(sql_text),' UNION ALL', -1),0,
decode(instr(upper(sql_text),' UNION ', -1),0,
decode(instr(upper(sql_text),' ORDER ',-1),0,
decode(instr(upper(sql_text),' GROUP ',-1),0,
decode(instr(sql_text,',',-1),0,
decode(instr(sql_text,' ',-1),0,
decode(instr(sql_text,')',-1),0, sql_text,
substr(sql_text,1,instr(upper(sql_text),')', -1))),
substr(sql_text,1,instr(upper(sql_text),' ',-1))),
substr(sql_text,1,instr(upper(sql_text),',',-1))),
substr(sql_text,1,instr(upper(sql_text),' GROUP ',-1))),
substr(sql_text,1,instr(upper(sql_text),' ORDER ',-1))),
substr(sql_text,1,instr(upper(sql_text),' UNION ALL',-1))),
substr(sql_text,1,instr(upper(sql_text),' UNION ',-1))),
substr(sql_text,1,instr(upper(sql_text),' WHERE ',-1))),
substr(sql_text,1,instr(upper(sql_text),' FROM ',-1)))) sql
from v$sqltext, (select max(piece) last_piece
from v$sqltext
where address='&&1') c
where address='&&1'
and piece=c.last_piece(+)) a,
( select piece + 1 tail_piece,
decode(instr(upper(sql_text),' FROM ',-1),0,
decode(instr(upper(sql_text),' WHERE ',-1),0,
decode(instr(upper(sql_text),' UNION ALL', -1),0,
decode(instr(upper(sql_text),' UNION ', -1),0,
decode(instr(upper(sql_text),' ORDER ',-1),0,
decode(instr(upper(sql_text),' GROUP ',-1),0,
decode(instr(upper(sql_text),',',-1),0,
decode(instr(upper(sql_text),' ',-1),0,
decode(instr(upper(sql_text),')',-1),0, sql_text,
substr(sql_text,instr(upper(sql_text),')', -1)+1)),
substr(sql_text,instr(upper(sql_text),' ', -1)+1)),
substr(sql_text,instr(upper(sql_text),',', -1)+1)),
substr(sql_text,instr(upper(sql_text),' GROUP ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' ORDER ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' UNION ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' UNION ALL',-1)+1)),
substr(sql_text,instr(upper(sql_text),' WHERE ',-1)+1)),
substr(sql_text,instr(upper(sql_text),' FROM ',-1)+1)) as sql1
from v$sqltext ,(select max(piece) last_piece
from v$sqltext
where address='&&1') c
where address='&&1'
and piece!=c.last_piece) b
where a.piece=b.tail_piece(+) ) d
order by piece
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6456/viewspace-112200/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/6456/viewspace-112200/