2015-06-24 51 views
-1

我在MySQL中有一个天气数据库。我的数据库从arduino获取数据,但有时候arduino会有一些错误,并在我的数据库中发送错误值。我想让存储过程拒绝这个错误。我想要在存储过程中使用。示例如果温度为< 20则MySQL拒绝此数据。可能吗?帮我请与编码在MySQL中使用存储过程

这是我的表

CREATE TABLE `cuaca_maritim`.`weather_data` (
`idweather` INT(10) NOT NULL, 
`temperature` DECIMAL(4,2) NOT NULL, 
`HUMID` DECIMAL(4,2) NOT NULL, 
`AIRPRESSURE` DECIMAL(6,2) NOT NULL, 
`WIND` DECIMAL(4,2) NOT NULL, 
PRIMARY KEY (`idweather`)) 
    ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_bin; 

回答

0

也许你只是想要一个观点:

create view good_weather_data as 
    select wd.* 
    from weather_data 
    where temperature >= 20; 

我真的不明白为什么一个存储过程是必要的。您可能需要加载时拒绝无效数据值的触发器。

+0

做同样的温度不,我不希望有一个观点,我想我的数据库可以拒绝的数据,所以数据不会保存在MyDatabase的。你能帮我吗? – Tia

+0

然后你想要一个触发器。从文档开始:https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html。 –

+0

我尝试之前使用触发器,但在使用它之后,arduino无法将数据发送到mysql – Tia

0

我认为你可以使用下面的存储过程来完成你的工作。

DELIMITER # 
CREATE OR REPLACE PROCEDURE add_weather_data (IN temp INT) 
proc_main: BEGIN 
IF (temp > 20) THEN 
    INSERT INTO weather_data(temperature) VALUES (temp); 
END IF; 
END proc_main # 
DELIMITER; 

这里我只是认为你能为其他参数也

+0

VALUES(温度),这是什么意思? – Tia

+0

您正在插入在存储过程中采用的临时参数值。 –

+0

存储过程不起作用,我尝试输入<20的温度值,但我的数据库仍然保存数据,它不会拒绝数据。为什么? – Tia