mysql или mariadb - это однострочный оператор с разделителем? - PullRequest
0 голосов
/ 07 декабря 2018

Из-за того, что наш bash-скрипт использует оператор mariadb в виде одной строки через переменную, у нас возникают проблемы с использованием разделителя.Есть ли способ иметь разделитель в однострочном операторе?

while read -r tmp;
    do
        chomped_line=${tmp}
        myOut+=("$chomped_line")
    done < <(mysql -u myUn -pmyPw -h myHost -D myDb --batch --xml<<<${mySqlVar})

mariadb, который работает как скрипт в многострочном

delimiter | 
select @myCount .... from table WHERE (myVal='valA' AND active=1); IF (@myCount > 0) THEN start transaction; .....; commit; END IF|

НЕ работает как одна строка, когда передается через ${mySqlVar}, останавливается после delimiter |

delimiter | select @myCount .... from table WHERE (myVal='valA' AND active=1); IF (@myCount > 0) THEN start transaction; .....; commit; END IF|

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Команда DELIMITER должна сопровождаться переводом строки.Вы не можете определить разделитель в той же строке, где вы впоследствии используете этот разделитель.

Возможно, вы захотите использовать mysql --delimiter ..., поэтому вам не нужно использовать команду DELIMITER как часть ввода.

Совет: Вы можете многому научиться, запустив mysql --help или прочитав документацию .

0 голосов
/ 07 декабря 2018

В MySQL / MariaDB, DELIMITER используется только для построения хранимых подпрограмм.Бросьте это.

Команда mysql очень рада принять несколько операторов SQL, разделенных ;.

$ echo "SELECT @x := NOW(); SELECT @x+INTERVAL 23 HOUR;" | mysql -u me
@x := NOW()
2018-12-07 11:28:51
@x+INTERVAL 23 HOUR
2018-12-08 10:28:51

Однако я рекомендую вам создать файл с SQL и вводомэто:

$ mysql -u me < script.sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...