【发布时间】:2021-11-16 23:59:03
【问题描述】:
我正在为 WindRose 开发一个 SP,当我尝试运行该 SP 时,SQL 显示此错误。
(Error 1366 SQL) Incorrect DECIMAL value '()' for column "" at row -1
修改我收集数据的表后出现此问题。在我为另一个表创建此 SP 之前它工作正常,但我不得不更改表,因为这是接收实时数据的表。
CREATE TEMPORARY TABLE viento_count(angulo DECIMAL, val1 INT, val2 INT, val3 INT, val4 INT, val5 INT, val6 INT);
myloop: LOOP
IF angle > 350 THEN
LEAVE myloop;
END IF;
SET angle1 = angle;
SET angle2 = angle + 15;
SET angle_grf = angle + 15/2;
SET valor1 = (SELECT COUNT(*) FROM vw_wind_counter WHERE speedy <= 3 AND (device_id = codigo_estacion) AND (data_time BETWEEN fecha_consulta_first_day AND fecha_consulta_last_day) AND direccion > angle1 AND direccion <= angle2);
SET valor2 = (SELECT COUNT(*) FROM vw_wind_counter WHERE speedy > 3 AND speedy <= 6 AND (device_id = codigo_estacion) AND (data_time BETWEEN fecha_consulta_first_day AND fecha_consulta_last_day) AND direccion > angle1 AND direccion <= angle2);
SET valor3 = (SELECT COUNT(*) FROM vw_wind_counter WHERE speedy > 6 AND speedy <= 9 AND (device_id = codigo_estacion) AND (data_time BETWEEN fecha_consulta_first_day AND fecha_consulta_last_day) AND direccion > angle1 AND direccion <= angle2);
SET valor4 = (SELECT COUNT(*) FROM vw_wind_counter WHERE speedy > 9 AND speedy <= 13 AND (device_id = codigo_estacion) AND (data_time BETWEEN fecha_consulta_first_day AND fecha_consulta_last_day) AND direccion > angle1 AND direccion <= angle2);
SET valor5 = (SELECT COUNT(*) FROM vw_wind_counter WHERE speedy > 13 AND speedy <= 18 AND (device_id = codigo_estacion) AND (data_time BETWEEN fecha_consulta_first_day AND fecha_consulta_last_day) AND direccion > angle1 AND direccion <= angle2);
SET valor6 = (SELECT COUNT(*) FROM vw_wind_counter WHERE speedy > 18 AND (device_id = codigo_estacion) AND (data_time BETWEEN fecha_consulta_first_day AND fecha_consulta_last_day) AND direccion > angle1 AND direccion <= angle2);
INSERT INTO viento_count SELECT angle_grf AS angulo, valor1 AS val1, valor2 AS val2, valor3 AS val3, valor4 AS val4, valor5 AS val5, valor6 AS val6;
SET angle = angle + 15;
END LOOP myloop;
SELECT * FROM viento_count;
DROP TEMPORARY TABLE viento_count;
目前,我从(vw_wind_counter) 视图中获取数据,其中我将CAST 速度和方向数据转换为DECIMAL 值。
我看过另一个关于这个问题的帖子,但其中很多是关于错误的数据插入。
【问题讨论】:
-
您似乎从未将您的
angle变量初始化为0 -
@MatBaillie,我做到了,我将变量初始化为
DECLARE angle INT DEFAULT 0;
标签: mysql sql stored-procedures view temp-tables