GoLang Хранимая процедура LastInsertId () возвращает 0 при успешной вставке - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть хранимая процедура в mysql 8.0.20 со следующим кодом:

create
    definer = root@localhost procedure CreateUser(IN data json)
BEGIN

    declare idUser_in int unsigned;
    declare firstName_in varchar(45) default null;
    declare lastName_in varchar(45) default null;
    declare email_in varchar(55) default null;
    declare enabled_in tinyint default 0;
    declare idRole_in int unsigned;
#   declare jwtSecret_in varchar(255);
    declare mobilePhone_in varchar(15);
    declare telephone_in varchar(15);
    declare password_in varchar(255);
    declare salt_in varchar(255);
    declare pin_in varchar(8);
    declare username_in varchar(55);

    set idUser_in = null;
    set firstName_in = json_unquote(json_extract(data, '$.firstName'));
    set lastName_in = json_unquote(json_extract(data, '$.lastName'));
    set email_in = json_unquote(json_extract(data, '$.email'));
    set enabled_in = json_unquote(json_extract(data, '$.enabled'));
    set idRole_in = json_unquote(json_extract(data, '$.idRole'));
#     set jwtSecret_in = json_unquote(json_extract(data, '$.jwtSecret'));
    set telephone_in = json_unquote(json_extract(data, '$.telephone'));
    set mobilePhone_in = json_unquote(json_extract(data, '$.mobilePhone'));
    set password_in = json_unquote(json_extract(data, '$.password'));
    set salt_in = json_unquote(json_extract(data, '$.salt'));
    set pin_in = json_unquote(json_extract(data, '$.pin'));
    set username_in = json_unquote(json_extract(data, '$.username'));

    insert into User (firstName, lastName, email, username, enabled, telephone, mobilePhone, idRole, password, salt, pin)
    values (firstName_in, lastName_in, email_in, username_in, enabled_in, telephone_in, mobilePhone_in, idRole_in, password_in, salt_in, pin_in);

    select LAST_INSERT_ID();
END;

Я выполняю вышеуказанную процедуру с go, используя следующую команду:

byteUser, err := json.Marshal(*user)
response, queryError := tx.Exec("call CreateUser(?)", string(byteUser))

Вставка в дБ выполнена успешно.

Однако при попытке получить последний вставленный идентификатор с помощью команды:

id, err = response.LastInsertId()

всегда возвращает 0.

Если я выполняю процедуру, используя следующий код я получаю последний вставленный идентификатор правильно, но я не получаю эту ошибку для отката ()

var id int64
response:= tx.QueryRow("call CreateUser(?)", string(byteUser))
err = response.Scan(&id)

Таким образом я получаю правильный последний вставленный идентификатор ...

Есть предложения? Каков наилучший способ вызова хранимых процедур из go / sql ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...