我在创建存储过程时遇到了一些麻烦,该过程允许用户从表(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


我得到了与此代码非常相似的代码,我将其调整为适合我的数据库,但是在第二行出现以下错误:“ RESULT”在此位置无效,需要一个标识符。

这与mySQL有关还是我的代码有问题?有什么可能的解决方案?

谢谢!

最佳答案

我不知道result应该在做什么。 RESULT syntax中没有CREATE PROCEDURE关键字。

我期望这样的事情:

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;


话虽如此,您不应该自己计算id。这引入了竞争条件,这意味着您的代码不是线程安全的。您应该使用auto_increment列作为ID。

关于mysql - 创建一个存储过程以从表中选择并将行插入到日志表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54982927/

10-11 03:31
查看更多