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