Написание хранимых процедур в Bash файле сценария - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь выполнить хранимую процедуру в сценарии bash. Это файл сценария

#!/bin/bash
mysql -u $1 -p$2  -e " 
create database test;
use test;
DELIMITER $$; 
CREATE PROCEDURE test.createTables ()
BEGIN
    CREATE TABLE Employee (
    id INT PRIMARY KEY,
    Name varchar(100),
    Department varchar(200) NOT NULL
    );
END$$
"

Здесь $ 1 и $ 2 - это соответственно пользователь и пароль базы данных, которые я передаю в качестве аргументов командной строки. Когда я пытаюсь выполнить те же команды в консоли MySQL, она работает нормально, но когда я запускаю файл сценария, я получаю следующую ошибку

ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 8

Может кто-то указать, где я иду не так?

1 Ответ

1 голос
/ 28 апреля 2020

Измените DELIMITER $$; на DELIMITER $$. Вам не нужен ; в конце директивы DELIMITER; он обрабатывает ; как часть строки-разделителя.

Также используйте одинарные кавычки вокруг строки.

#!/bin/bash
mysql -u $1 -p$2  -e '
create database test;
use androidcrashes;
DELIMITER $$
CREATE PROCEDURE test.createTables ()
BEGIN
    CREATE TABLE Employee (
    id INT PRIMARY KEY,
    Name varchar(100),
    Department varchar(200) NOT NULL
    );
END$$
'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...