Создание хранимой процедуры на MySQL - PullRequest
1 голос
/ 13 марта 2020

Я пытаюсь выполнить приведенный ниже запрос, который сохраняется в файле .sql, затем читается с ioutils.ReadFile и выполняется при инициализации

CREATE TABLE IF NOT EXISTS districts
(
    GeoCode integer PRIMARY KEY,
    name    varchar(32)
);

drop procedure if exists insert_district;

DELIMITER $$

CREATE PROCEDURE insert_district(in pgeocode int, in pname varchar(32))
BEGIN
    INSERT INTO districts(geocode, name) VALUES (pgeocode, pname);
    SELECT * FROM districts where geocode = pgeocode;
END$$
DELIMITER ;

Я используя пакет database / sql и выполните запрос с Exe c

Error 1064: 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 'drop procedure if exists insert_district;

DELIMITER $$

CREATE PROCEDURE insert' at line 7

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

1 Ответ

4 голосов
/ 13 марта 2020

Клиент Go MySQL не поддерживает несколько операторов SQL по умолчанию. Вы не можете просто передать ему текстовый файл с ; разделенными операторами.

См. Существует ли драйвер Go Mysql, который поддерживает несколько операторов в одной строке? для детали - есть опция, которую вы можете использовать для разрешения нескольких операторов.

Но это все равно не будет поддерживать операторы типа DELIMITER, которые не распознаются сервером MySQL. Это mysql клиентская команда .

У вас есть два варианта:

  • Анализировать файл. sql, чтобы найти терминаторы операторов и запускать операторы по одному.
  • Выполнить mysql клиент в подпроцессе, использующий в качестве входных данных файл. sql.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...