第 1 行的 MySQL 错误'NULL'



尝试执行此操作时出现此错误:

#1064 - 您的 SQL 语法有误;请查看手册 对应于您的MySQL服务器版本,以便使用正确的语法 第 1 行的"空"附近

似乎找不到问题所在。如果有人可以提供帮助,请表示感谢

SET @sql = NULL;
SELECT
  GROUP_CONCAT(
    DISTINCT CONCAT (
      "SUM(IF(DATE(FROM_UNIXTIME(machine_stop)) = '",
      DATE(FROM_UNIXTIME(machine_stop)),"' ,
      (machine_start-machine_stop)/3600, 0)) AS ",
      DATE(FROM_UNIXTIME(machine_stop))
    )
  ) INTO @sql
FROM
  downtime_data
WHERE
  DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY;
SET @sql = CONCAT("SELECT
                     failure_code, ", @sql, " 
                   FROM
                     downtime_data 
                   WHERE
                     p.machine='HH1' AND
                     DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY 
                   GROUP BY
                     failure_code,
                     DATE(FROM_UNIXTIME(machine_stop))"
                 );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

如果@sql变量在第一个选择语句之后仍然保存NULL值,那么您稍后在执行 prepare 语句时会遇到异常。

使用 CONCAT 查看以下选择语句

SET @sql := NULL; SELECT CONCAT('abc',@sql,'def');

结果是 NULL .尽管您可能期望结果是abcdef.

为了获得abcdef您需要这样做

SET @sql := NULL; SELECT CONCAT('abc',IFNULL(@sql,''),'def');

如果可以解决问题,您可以尝试以下任一操作:

1) SET @sql := '';

2)如果要将此行保留SET @sql = NULL;,请像这样更改最终查询的部分SET @sql = CONCAT("SELECT failure_code ", IF(@sql IS NULL, '',CONCAT(',',@sql)),

这是最后一个查询:

SET @sql = CONCAT("SELECT
                     failure_code ", IF(@sql IS NULL, '',CONCAT(',',@sql)), " 
                   FROM
                     downtime_data 
                   WHERE
                     p.machine='HH1' AND
                     DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY 
                   GROUP BY
                     failure_code,
                     DATE(FROM_UNIXTIME(machine_stop))"
                 );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

明白了,在这种情况下,查询中没有行

DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY

所以它返回了空

我遇到了这个问题,但让我与您分享我发现的独特解决方案,我正在同时处理 2 个存储过程,在一个新的会话中,如果我运行第一个 sp,我会遇到此错误,但是当我在运行第二个 sp 后运行第一个 sp 时,错误消失了,我得到了我的结果。

这与 mysql 会话变量有关,该变量在第二个 sp 中设置并也适用于第一个。

相关内容

  • 没有找到相关文章

最新更新