我在创建一个存储过程时遇到了一些麻烦,该过程允许用户从表(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有关还是我的代码有问题?有什么可能的解决方案?
谢谢!
答案 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。