创建一个存储过程以从表中选择并将行插入到日志表中

时间:2019-03-04 12:06:49

标签: mysql sql

我在创建一个存储过程时遇到了一些麻烦,该过程允许用户从表(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”在此位置无效,需要一个标识符。 / strong>

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道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。