2013-01-15 39 views
2

我有一個腳本文件,它向sqlplus發送查詢並將輸出發送到其他輸出文件。 但是,這個輸出文件包含來自sqlplus的一些信息 - 某種問候語。向sqlplus發送查詢

SQL*Plus: Release 11.2.0.3.0 Production on Tue Jan 15 12:30:40 2013       

Copyright (c) 1982 2011  Oracle. All rights reserved.     


Connected to:       
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production        
With the Partitioning Real Application Clusters Automatic Storage Management OLAP    
Data Mining and Real Application Testing options        

是否有一些方法來執行該腳本,以便這個問候不會作爲文件的一部分?

回答

2

當您連接到數據庫時,您可以使用sqlplus -s選項。

1
Execsqlstatement1="select 
'ZZZ|' 
||count(*) total 
from table1" 


$ORACLE_HOME/bin/sqlplus user/tneal01 << Eossql 
    set lines 80 
    set pages 50000 
    set timing on 
    spool /user/tneal01/SPOOL/output.`date +%Y-%m-%d`.tmp 
    $Execsqlstatement1 
    /
    spool off 
    quit; 
Eossql 

現在,如果你不想讓除了結果在輸出文件中,你可以做這樣的事情在你的腳本什麼:

grep 'ZZZ' $OutPutDir/$OutPutFile.$today.tmp|cut -d"|" -f2- >$OutPutDir/$OutPutFile.$today.txt 

這是爲什麼這工作的完整的例子:

#!/bin/ksh 

today=`date "+%Y-%m-%d"` 
OutPutDir="https://stackoverflow.com/users/ttead01/SPOOL" 
OutPutFile="output" 

#add sql statements here 

Execsqlstatement1="select 
'ZZZ|' 
||count(*) total 
from users" 


#adding connection details here 

$ORACLE_HOME/bin/sqlplus tead01/rangers $SQLPLUS -s/<< Eossql 
    set lines 80 
    set pages 50000 
    set timing on 
    spool /users/ttead01/SPOOL/output.`date +%Y-%m-%d`.tmp 
    $Execsqlstatement1; 
    spool off 
    quit; 
Eossql 

#check to make sure no ORA errors in the query 

grep "ORA-" $OutPutDir/$OutPutFile.$today.tmp 
if [ $? -eq 0 ] 
then 
    echo "LOG MESSAGE sql select failed" 


exit 1 
fi 

#Seach for ZZZ and cut out junk and send only result to a .txt file 

grep 'ZZZ' $OutPutDir/$OutPutFile.$today.tmp|cut -d"|" -f2- >$OutPutDir/$OutPutFile.$today.txt 

#Remove the .tmp file if .txt was created 

if [ $? -eq 0 ] 
then 
    /usr/bin/rm -f $OutPutDir/$OutPutFile.$today.tmp 
else 
    exit 1 
fi 

現在的測試:

的bash-3.2 $ test.sh

Copyright (c) 1982, 2010, Oracle. All rights reserved. 




SQL> set autocommit on; 
SQL> rem set linesize 132; 
SQL> define _editor = vi 
SQL> alter session set nls_date_format = 'YYYYMMDD HH24MISS'; 

Session altered. 

SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 7 8 
TOTAL 
-------------------------------------------- 
ZZZ|32 

Elapsed: 00:00:00.17 

現在讓我們看看在輸出.txt文件:

bash-3.2$ cat output.2016-05-28.txt 
32 
bash-3.2$