Создание хранимой процедуры для выбора из таблицы и вставки строки в таблицу журнала - PullRequest
0 голосов
/ 04 марта 2019

У меня возникли проблемы с созданием хранимой процедуры, которая позволяет пользователю выбирать из таблицы (medicoes) и вставляет строку в log_medicoes для целей аудита.

CREATE PROCEDURE select_medicoes ()

RESULT (ID_variavel INTEGER, Num_medicao INTEGER, ID_cultura INTEGER, Data_hora DATE, Valor INTEGER)

BEGIN
DECLARE ID_novo INTEGER;

SELECT max(IDLog) + 1 INTO ID_novo FROM log_medicoes;
INSERT INTO log_medicoes (IDLog, IDVariavel, IDCultura, NumMedicao, DataHoraMedicao, ValorMedicao, Utilizador, Data, Operacao) 
VALUES (ID_novo, IDVariavel, IDCultura, NumMedicao, DataHoraMedicao, ValorMedicao, user_id(), now(), 'S');

SELECT ID_variavel, Num_medicao, ID_cultura, Data_hora, Valor FROM medicoes;
END

Мне дали очень коданалогично этому, я адаптировал его для своей базы данных, но я получаю следующую ошибку во второй строке: «РЕЗУЛЬТАТ» недопустим в этой позиции, ожидая идентификатор.

Isэто связано с MySQL или что-то не так с моим кодом?Какое будет возможное решение?

Спасибо!

1 Ответ

0 голосов
/ 04 марта 2019

Я не знаю, что должен делать result.В синтаксисе CREATE PROCEDURE нет .

ключевого слова RESULT. Я бы ожидал что-то вроде этого:

CREATE PROCEDURE select_medicoes (
    in_ID_variavel INTEGER,
    in_Num_medicao INTEGER,
    in_ID_cultura INTEGER,
    in_Data_hora DATE,
    in_Valor INTEGER
)
BEGIN
    DECLARE ID_novo INTEGER;

    SELECT max(IDLog) + 1 INTO ID_novo FROM log_medicoes;

    INSERT INTO log_medicoes (IDLog, IDVariavel, IDCultura, NumMedicao, DataHoraMedicao, ValorMedicao, Utilizador, Data, Operacao) 
        VALUES (in_ID_novo, in_IDVariavel, in_IDCultura, in_NumMedicao, in_DataHoraMedicao, in_ValorMedicao, user_id(), now(), 'S');

    SELECT ID_variavel, Num_medicao, ID_cultura, Data_hora, Valor
    FROM medicoes;
END;

Сказав это, вы не должнывычисление идентификатора самостоятельно.Это вводит условия гонки и означает, что ваш код не является потокобезопасным.Вы должны использовать столбец auto_increment для идентификатора.

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