2016-05-26 4 views
1

:ここ空でない結果セットがある場合、MySQLはゼロ以外の戻りコードを出力できますか?私はLinuxを使用してMySQLの5.6</p> <p>私は、MySQLをこのように実行しています

mysql --user=XXX --password=XXX < myfile.sql 

は、私が何をしたいのかmyfile.sql

select * from account where balance < 0 

の内容であることは、次のとおりです。

負の残高を持つアカウントが少なくとも1つある場合は、ゼロ以外の戻りコードを返します。

その後、私のスクリプトは次のようにこの状況を確認することができます。

mysql --user=XXX --password=XXX < myfile.sql 
if [[ $? -gt 0 ]] 
then 
    echo ERROR: Negative balance 
fi 

私はこれを達成することはできますか?

または、別の方法がありますか?

2016年5月28日更新:

は実は、私の実際の生活のケースは複雑です。私はこの簡単な例を使って自分の問題を簡単に表現しています。

実際には、シェルスクリプト関数に[return]文のようなものがありますので、別の状況に応じて異なる戻りコードを与えることができますか?

以下の回答については、MySQLが自己定義のリターンコードを生成できないようです。カウント(*)を出力ディスプレイの最後の行に置くことは選択肢のようです。

+0

[bashで戻り変数を通報します]の可能な重複(http://stackoverflow.com/questions/6763707/problem-with-return-variable-in-bash) – GhostGambler

答えて

1

変更行を数えるのではなく、データを返すためにあなたのSQL:

select COUNT(*) as total from account where balance < 0 

が続い行データ(というよりも$で返された結果コードを結果された出力をキャプチャするだけでしょうか?クエリ実行の成功)、最初の行(列エイリアス 'total')をsedでスキップすると、2行目が行数になります。

out=$(/opt/local/lib/mysql5/bin/mysql --user=XXX --password=XXX < myfile.sql | sed -n 2p) 
if [[ $out -gt 0 ]] 
then 
    echo ERROR: Negative balance 
fi 

私はMacOSXのではないのLinuxでこれをテストしてみたが、原理は同じでなければなりません。

(そしてもちろん! - あなたがソースコードでデータベースのパスワードを埋め込むするつもりはない、あなたは)

関連する問題