エコーされた文字列に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/....
をそして、あなたは、SQLを作るために-s
フラグを使用することができます*プラスそのバナーを抑制する:ちなみに
... exit" | /opt/xxx/oracle/client/bin/sqlplus -s "abc/[email protected]"
、あなたが名前にサービスを提供するためにSIDを使用して切り替えることができれば、あなたが代わりにフルTNSは、接続記述子の短絡「簡易接続」構文を使用することができます。
クイックデモと簡単なクエリ。私は、コマンドライン(ちょうどスクロールを防止するために、2つの行に分割)からこれを行う場合:
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
への)コマンド全体をシェルスクリプトに入れておけば、cronからシェルスクリプトを呼び出すことができます。
これはcron自体とは関係ありません。コマンド行から同じことを最初に行うことができます。 SQL \ * Plusから実行するスクリプトではなく、crontab自体にSQLが必要な理由はありますか? –
'sqlplusの後ろに' -Suilent'コマンドを 'sqplus -s user/password'として使うことができます。 – JSapkota
私は理由があります - スクリプトは一度に実行されます – 4est