SQLクエリを実行し、クエリ結果をテーブル形式で電子メールで送信するシェルスクリプトを作成するにはどうすればよいですか?

SQLクエリを実行し、クエリ結果をテーブル形式で電子メールで送信するシェルスクリプトを作成するにはどうすればよいですか?

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です。perlpython

より良い方法は、コンテンツ全体をデータベースに作成するか、perlデータベースpythonに接続し、SQL文を実行し、データをダウンロードしてフォーマットすることです。

もう一つの方法は、オンラインでツールを検索または作成することですexport2csv(githubには複数のバージョンがあります)。あなたの環境で動作するものを見つけます。通常、SQL文と出力ファイルを定義する簡単な方法があります。

データベースへのODBC接続があり(unixODBCうまく機能)、C ++コードをコンパイルできる場合は、鉱山を試してみてくださいnisqlhttps://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テーブル作成の前に実行する必要があります。

関連情報