PUTTYでSHELLスクリプトを使用してSQLクエリを実行し、上部にヘッダーとメッセージ行を含む電子メール本文のテーブル形式で結果を送信する必要があります。これまでこれを書いていますが、結果を表形式で取得することはできません。
#! /bin/ksh
sqlplus -s user/pass @sid > /dev/null << EOF
whenever sqlerror exit 4;
set newpage 0
set space 0
set feedback off
set head off
set echo off
set pagesize 0
set serverout on
set trimspool on
set linesize 3000
spool $CSVFILE
select * from table;
spool off;
exit 0;
EOF
mailx -s "Subject Line" [email protected] < $CSVFILE
exit 0
SQLは正常に実行され、データはCSVFILEに格納されます。私が望む結果は、表形式で電子メール本文の電子メールアドレスに送信し、テーブルの上に次のメッセージ行も含める必要があります。 おおよその形式のメールの例
エラーはありません。ただし、SET HEAD ON後もCSVFILEにヘッダーはありません。また、「mail -a(content-type)」ソリューションを試しましたが、「-a」を使用するとエラーが発生します。
答え1
シェルは良いツールではありません。
より良い解決策は、データをファイルにダンプしてからファイルを使用または再フォーマットすることawk
です。perl
python
より良い方法は、コンテンツ全体をデータベースに作成するか、perl
データベースpython
に接続し、SQL文を実行し、データをダウンロードしてフォーマットすることです。
もう一つの方法は、オンラインでツールを検索または作成することですexport2csv
(githubには複数のバージョンがあります)。あなたの環境で動作するものを見つけます。通常、SQL文と出力ファイルを定義する簡単な方法があります。
データベースへのODBC接続があり(unixODBC
うまく機能)、C ++コードをコンパイルできる場合は、鉱山を試してみてくださいnisql
。https://github.com/White-Owl/nisql
答え2
sqlplus
問題は設定方法にあります。たとえば、コレクションを追加します。
set lines 256
set trimout on
set tab off
次のようにテーブルを印刷します。
Name | Address | Phone |
-------+---------------+-------------+
name1 | address1 | phone1 |
name2 | address2 | phone2 |
name3 | address3 | phone3 |
その後、最後のコマンドは見栄えの良い形式の電子メールを送信します。
テーブルの前に行を追加するには、次のものを使用できますprompt
。
prompt Hi,
prompt Please check results below:
prompt
ご存知のように、これらのコマンドはselect
テーブル作成の前に実行する必要があります。