2016-05-26 2 views
1

Я использую Linux и MySQL 5.6Может ли MySQL выдавать ненулевой код возврата при непустоте результата?

Я бегу для MySQL таким образом:

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

Вот содержание myfile.sql

select * from account where balance < 0 

То, что я хочу сделать то, что:

Если есть хотя бы одна учетная запись с отрицательным балансом, выдайте ненулевой код возврата.

Тогда мой сценарий может проверить эту ситуацию так:

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

Могу ли я достичь этого?

Или есть альтернативные методы?

2016-05-28 обновление:

На самом деле, моя реальная жизнь дело осложняется. Я использую этот простой пример для упрощения выражения моей проблемы.

На самом деле есть что-то вроде инструкции [return] в функции сценария оболочки, чтобы я мог выдавать разные коды возврата в зависимости от разных ситуаций?

Для принятого ниже ответа, похоже, что MySQL не может создать самоопределяемый код возврата. Помещение счетчика (*) в качестве последней строки выходного дисплея представляется альтернативой.

+0

Возможного дубликата [Проблема с переменным возвратом в Баше] (http://stackoverflow.com/вопросы/6763707/проблемы с-возвратная переменными в-Баш) – GhostGambler

ответ

1

Изменить ваш SQL для подсчета строк, а не возвращать данные:

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

Затем захватить выход, который является результатом строк данных (а не возвращаемый код результата в $, который просто? успех выполнения запроса), пропустите первую строку (псевдоним столбца «total») с помощью sed, затем вторая строка - ваше количество строк.

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, но принцип должен быть таким же.

(И, конечно, - вы не собираетесь вставлять ваш пароль базы данных в исходном коде, вы)

Смежные вопросы