| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Re: Need help formatting in stream SQL output
You can use perl and the Oracle dbi driver to it's all
in one file.
http://theoryx5.uwinnipeg.ca/mod_perl/cpan-search?join=and&arrange=fi=
le&download=auto&stem=no&case=clike&site=ftp.funet.fi&age=&dist=
info=338
Sidhe wrote in message <37EC6F02.C4E28D8F_at_home.net>...
Hello all!
My objective is to execute a series of O/S commands and spooled SQL =
queries
from within a single script without calling out to any secondary = command files or scripts. I want to use just 1 file.
Here is what I WAS doing using multiple command files...
## Only interested in Production instance
export ORACLE_SID=MTPPROD
## Show tables with extents > 25
sqlplus username/password @textents.sql
## Show indexes with extents > 25
sqlplus username/password @iextents.sql
## Show RowCount Info
sqlplus username/password @rowcount.sql
## Cleanup and send report
mv /tmp/tab_extents.lis /tmp/extents
cat /tmp/idx_extents.lis >> /tmp/extents
cat /tmp/rowcount.lis >> /tmp/extents
rm /tmp/*extents.lis
rm /tmp/rowcount.lis
mail -s "MTPPROD Extents" rwestbrook_at_dollargeneral.com </tmp/extents =
COLUMN SEGMENT_NAME FORMAT A25 HEADING 'NAME' SPOOL /tmp/tab_extents.lis
SELECT A.SEGMENT_NAME, A.SEGMENT_TYPE TYPE,
MAX(A.EXTENT_ID) EXTENTS, b.max_extents MAX,
(b.max_extents - MAX(A.EXTENT_ID)) REMAINING
FROM DBA_EXTENTS A, DBA_TABLES B
WHERE A.OWNER = 'MTPMGR' AND
A.SEGMENT_TYPE IN ('TABLE','INDEX') AND
B.TABLE_NAME = A.SEGMENT_NAME
GROUP BY A.OWNER,SEGMENT_TYPE,A.SEGMENT_NAME,B.MAX_EXTENTS
HAVING MAX(A.EXTENT_ID) > 25;
spool off
exit
COLUMN SEGMENT_NAME FORMAT A25 HEADING 'NAME' SPOOL /tmp/idx_extents.lis
SELECT A.SEGMENT_NAME, A.SEGMENT_TYPE TYPE,
MAX(A.EXTENT_ID) EXTENTS, b.max_extents MAX,
(b.max_extents - MAX(A.EXTENT_ID)) REMAINING
FROM DBA_EXTENTS A, DBA_INDEXES B
WHERE A.OWNER = 'MTPMGR' AND
A.SEGMENT_TYPE IN ('TABLE','INDEX') AND
B.INDEX_NAME = A.SEGMENT_NAME
GROUP BY A.OWNER,SEGMENT_TYPE,A.SEGMENT_NAME,B.MAX_EXTENTS
HAVING MAX(A.EXTENT_ID) > 25;
spool off
exit
My output looks nice and clean like this...(and this is the way I = want it to look)
NAME TYPE EXTENTS MAX =
REMAINING
INCOMPAT_TRLR_TYPE TABLE 120 249 =
129
INTFC_LTL_RATE TABLE 52 249 =
197
LOAD TABLE 129 249 =
120
LOAD_STOP TABLE 242 300 =
58
LTL_BASE TABLE 132 249 =
117
LTL_RATE TABLE 50 249 =
199
MOD_LIST TABLE 72 249 =
177
ORD TABLE 100 249 =
149
ORD_LOAD TABLE 68 249 =
181
ORD_LOAD_SEQ TABLE 36 249 =
213
STATUS_HISTORY TABLE 79 250 =
171
TL_RATE_CB TABLE 52 249 =
197
ZONE_NETWORK_DET TABLE 199 249 =
50
NAME TYPE EXTENTS MAX =
REMAINING
FK_LOAD_STOP_1_IDX INDEX 40 249 =
209
PK_LOAD INDEX 48 249 =
201
PK_LOAD_STOP INDEX 190 249 =
59
PK_LTL_BASE INDEX 69 249 =
180
PK_MOD_LIST INDEX 126 249 =
123
PK_ORD INDEX 78 249 =
171
PK_ORD_LOAD_SEQ INDEX 103 249 =
146
PK_ORD_QUANTITY INDEX 111 249 =
138
PK_STATUS_HISTORY INDEX 251 300 =
49
PK_TL_RESOURCE_CARRIER INDEX 34 249 =
215
PK_TL_RESOURCE_TRLR INDEX 54 249 =
195
LOAD_STOP
----------
13736
STATUS_HISTORY
23750
But I want to run it all from a single script.. so I combined = everything
into one single file/script like this...
## Only interested in Production instance
export ORACLE_SID=MTPPROD
## Show tables with extents > 25
sqlplus username/password <<EOF
set linesize 80
set feedback off
COLUMN SEGMENT_NAME FORMAT A25 HEADING 'NAME';
SPOOL /tmp/tab_extents.lis
SELECT A.SEGMENT_NAME, A.SEGMENT_TYPE TYPE,
MAX(A.EXTENT_ID) EXTENTS, b.max_extents MAX,
(b.max_extents - MAX(A.EXTENT_ID)) REMAINING
FROM DBA_EXTENTS A, DBA_TABLES B
WHERE A.OWNER = 'MTPMGR' AND
A.SEGMENT_TYPE IN ('TABLE','INDEX') AND
B.TABLE_NAME = A.SEGMENT_NAME
GROUP BY A.OWNER,SEGMENT_TYPE,A.SEGMENT_NAME,B.MAX_EXTENTS
HAVING MAX(A.EXTENT_ID) > 25;
spool off;
EOF
## Show indexes with extents > 25
sqlplus username/password <<EOF
set linesize 80
set feedback off
COLUMN SEGMENT_NAME FORMAT A25 HEADING 'NAME';
SPOOL /tmp/idx_extents.lis
SELECT A.SEGMENT_NAME, A.SEGMENT_TYPE TYPE,
MAX(A.EXTENT_ID) EXTENTS, b.max_extents MAX,
(b.max_extents - MAX(A.EXTENT_ID)) REMAINING
FROM DBA_EXTENTS A, DBA_INDEXES B
WHERE A.OWNER = 'MTPMGR' AND
A.SEGMENT_TYPE IN ('TABLE','INDEX') AND
B.INDEX_NAME = A.SEGMENT_NAME
GROUP BY A.OWNER,SEGMENT_TYPE,A.SEGMENT_NAME,B.MAX_EXTENTS
HAVING MAX(A.EXTENT_ID) > 25;
spool off;
EOF
## Show RowCount Info
sqlplus username/password <<EOF
set linesize 80
set feedback off
spool /tmp/rowcount.lis
select count(*) Load_Stop from load_stop; select count(*) Status_History from status_history;
spool off;
EOF
## Cleanup and send report
mv /tmp/tab_extents.lis /tmp/extents
cat /tmp/idx_extents.lis >> /tmp/extents
cat /tmp/rowcount.lis >> /tmp/extents
rm /tmp/*extents.lis
rm /tmp/rowcount.lis
mail -s "MTPPROD Extents" rwestbrook_at_dollargeneral.com </tmp/extents =
However, even though I'm using the same SQL with the same options, = my output
looks like this...
2 MAX(A.EXTENT_ID) EXTENTS, b.max_extents MAX,
3 (b.max_extents - MAX(A.EXTENT_ID)) REMAINING
4 FROM DBA_EXTENTS A, DBA_TABLES B
5 WHERE A.OWNER = 'MTPMGR' AND
6 A.SEGMENT_TYPE IN ('TABLE','INDEX') AND
7 B.TABLE_NAME = A.SEGMENT_NAME
8 GROUP BY A.OWNER,SEGMENT_TYPE,A.SEGMENT_NAME,B.MAX_EXTENTS
9 HAVING MAX(A.EXTENT_ID) > 25;
NAME TYPE EXTENTS MAX =
REMAINING
INCOMPAT_TRLR_TYPE TABLE 120 249 =
129
INTFC_LTL_RATE TABLE 52 249 =
197
LOAD TABLE 129 249 =
120
LOAD_STOP TABLE 242 300 =
58
LTL_BASE TABLE 132 249 =
117
LTL_RATE TABLE 50 249 =
199
MOD_LIST TABLE 72 249 =
177
ORD TABLE 100 249 =
149
ORD_LOAD TABLE 68 249 =
181
ORD_LOAD_SEQ TABLE 36 249 =
213
STATUS_HISTORY TABLE 79 250 =
171
TL_RATE_CB TABLE 52 249 =
197
ZONE_NETWORK_DET TABLE 199 249 =
50
SQL> spool off;
SQL> SELECT A.SEGMENT_NAME, A.SEGMENT_TYPE TYPE,
2 MAX(A.EXTENT_ID) EXTENTS, b.max_extents MAX,
3 (b.max_extents - MAX(A.EXTENT_ID)) REMAINING
4 FROM DBA_EXTENTS A, DBA_INDEXES B
5 WHERE A.OWNER = 'MTPMGR' AND
6 A.SEGMENT_TYPE IN ('TABLE','INDEX') AND
7 B.INDEX_NAME = A.SEGMENT_NAME
8 GROUP BY A.OWNER,SEGMENT_TYPE,A.SEGMENT_NAME,B.MAX_EXTENTS
9 HAVING MAX(A.EXTENT_ID) > 25;
NAME TYPE EXTENTS MAX =
REMAINING
FK_LOAD_STOP_1_IDX INDEX 40 249 =
209
PK_LOAD INDEX 48 249 =
201
PK_LOAD_STOP INDEX 190 249 =
59
PK_LTL_BASE INDEX 69 249 =
180
PK_MOD_LIST INDEX 126 249 =
123
PK_ORD INDEX 78 249 =
171
PK_ORD_LOAD_SEQ INDEX 103 249 =
146
PK_ORD_QUANTITY INDEX 111 249 =
138
PK_STATUS_HISTORY INDEX 251 300 =
49
PK_TL_RESOURCE_CARRIER INDEX 34 249 =
215
PK_TL_RESOURCE_TRLR INDEX 54 249 =
195
SQL> spool off;
SQL> select count(*) Load_Stop from load_stop;
LOAD_STOP
13707
SQL> select count(*) Status_History from status_history;
STATUS_HISTORY
23756
SQL> spool off;
My question is this; How can I run my queries and commands from one = single
file and still have my output the way I want it? ie just the = headings and data without the query echos.
Thanks in advance!
Roger Westbrook, DBA/Sys Admin
Dollar General Corp.
rwestbrook_at_dollargeneral.com
Received on Sat Sep 25 1999 - 17:32:03 CDT
![]() |
![]() |