You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL错误1366:运行风玫瑰图存储过程报Incorrect DECIMAL value '()'错误

问题定位

  • 优先排查vw_wind_counter视图的底层原始表脏数据:你仅在视图层做了DECIMAL类型转换,若原始表的direccion(风向)、speedy(风速)字段存在()、空字符串等非数值异常值,CAST转换过程中就会触发该报错。旧表无这类脏数据,因此之前的存储过程可以正常运行。
  • 其次排查变量初始化问题:检查存储过程开头的angle变量是否正确设置了初始值(比如初始值设为0),如果angle未初始化导致值为NULL,后续计算angle_grf等值时会生成无效数值,插入临时表时触发类型错误。
  • 最后排查隐式类型转换冲突:你的查询条件中存在direccion > angle1这类数值比对逻辑,如果direccion转换后的DECIMAL精度与angle1变量的精度不匹配,会触发隐式类型转换,脏数据在转换过程中就会抛出该错误。

解决方法

  1. 定位并处理底层脏数据
    执行以下查询找出异常值:
-- 查找风向字段异常值
SELECT DISTINCT direccion FROM 底层原始表 WHERE direccion NOT REGEXP '^[0-9.]+$' OR direccion IS NULL;
-- 查找风速字段异常值
SELECT DISTINCT speedy FROM 底层原始表 WHERE speedy NOT REGEXP '^[0-9.]+$' OR speedy IS NULL;

找到异常记录后可以直接清理脏数据,也可以在视图的CAST逻辑中增加容错处理:

-- 视图转换时增加容错,无效值转为0或NULL
CAST(CASE WHEN speedy REGEXP '^[0-9.]+$' THEN speedy ELSE 0 END AS DECIMAL(5,2)) AS speedy,
CAST(CASE WHEN direccion REGEXP '^[0-9.]+$' THEN direccion ELSE 0 END AS DECIMAL(5,2)) AS direccion
  1. 统一数值精度,规避隐式转换问题
    临时表定义、视图CAST转换、变量声明都统一指定DECIMAL精度,避免精度不匹配触发的转换异常:
-- 临时表字段明确指定精度
CREATE TEMPORARY TABLE viento_count(angulo DECIMAL(5,2), val1 INT, val2 INT, val3 INT, val4 INT, val5 INT, val6 INT);

同时确认存储过程开头已经正确初始化angle变量,比如添加SET angle = 0;。

  1. 优化插入语句逻辑
    将原有INSERT INTO ... SELECT语句改为直接用VALUES插入,避免SELECT无返回值时生成无效数据:
INSERT INTO viento_count(angulo, val1, val2, val3, val4, val5, val6)
VALUES (angle_grf, valor1, valor2, valor3, valor4, valor5, valor6);

内容的提问来源于stack exchange,提问作者Eduardo Mancilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:06:01