您可以在回顯字符串中包含SQL * Plus set
命令,但也需要嵌入新行;從回聲切換到printf可能會使這個更簡單/清理程序。
然後可以拼接你的列用逗號獲得CSV輸出:
printf "set pages 0 lines 200 trimout on tab off feedback off\nselect col1||','||col2 from table1;exit" | /opt/....
根據您的意見,我還增加了行大小。 You can read more about the settings available和formatting in general。
如果您的列包含可能包含逗號的字符串,則可以將它們的值用雙引號引起來,這樣可以避免它們被Excel或其他工具誤解爲額外的列。
如果你想CSV頭,以及你可以有一個虛擬的查詢來獲取他們,或使用提示命令添加固定文本:
printf "set pages 0 lines 200 trimout on tab off feedback off\nprompt COL1,COL2\nselect col1||','||col2 from table1;exit" | /opt/....
而且你可以使用-s
標誌,使SQL *加抑制其橫幅:
... exit" | /opt/xxx/oracle/client/bin/sqlplus -s "abc/[email protected]"
順便說一句,如果你可以使用SID爲服務名切換,你可以使用短「易連接」的語法,而不是完整TNS連接描述符。
使用簡單查詢進行快速演示;如果我這樣做的命令行(分成兩行只是爲了防止滾動):
printf "set pages 0 feedback off\nprompt Col1,Col2\nselect dummy||','||dummy from dual;" |\
/path/to/sqlplus -s myuser/[email protected]//myhost:myport/myservicename
整個輸出我得到的是:
Col1,Col2
X,X
我會認真考慮把至少SQL命令到一個.sql腳本文件並從SQL * Plus執行;並且可能將整個命令(調用執行腳本的sqlplus
)放到shell腳本中 - 然後您可以從cron調用shell腳本。
這與cron本身無關。您可以先從命令行執行相同的操作。是否有你想在crontab本身中使用SQL的原因,而不是從SQL \ * Plus執行的腳本中? –
您可以在'sqlplus'作爲'sqplus -s用戶/密碼'後使用'-S'命令。 – JSapkota
我有理由 - 該腳本將一次執行 – 4est