当表没有任何行时,过程给出错误

时间:2014-06-23 04:54:42

标签: mysql

我有以下数据库表:表名 - dim_module

id       Creation_Date         Goals  Alternative    Value
-----------------------------------------------------------
1   2014-04-17 10:09:30         G1         A         0.86
2   2014-04-17 10:09:30         G1         B         0.87
3   2014-04-17 10:09:30         G2         A         0.5
4   2014-04-17 10:09:30         G2         B         0

我正在使用以下程序获取所需的输出

CREATE DEFINER=`root`@`localhost` PROCEDURE `stmt`()
BEGIN
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(goals = ''',
      goals,
      ''', round(value, 2), NULL)) AS ',
      goals
    )
  ) INTO @sql
FROM sgwebdb.dim_module;
SET @sql = CONCAT('SELECT alternative, ', @sql, ' FROM sgwebdb.dim_module GROUP BY alternative');

prepare stmt from @sql;

但是如果Dim_Module没有任何行,那么程序就不会小心,我会收到错误。

  

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在' NULL'附近使用在第1行

请帮忙照顾空桌。

2 个答案:

答案 0 :(得分:0)

可能因为@sql为空。

尝试使用IFNULL将其设置为某个值

SET @sql = CONCAT('SELECT alternative, ', IFNULL(@sql,'somecolumnor*here'), ' FROM sgwebdb.dim_module GROUP BY alternative');

或者检测到@sql为空并执行其他操作。

答案 1 :(得分:0)

您可以在第二个SELECT

中使用之前检查@sql
IF @sql
THEN
    SET @sql = CONCAT('SELECT alternative, ', @sql, ' FROM sgwebdb.dim_module GROUP BY alternative');
    prepare stmt from @sql;
END IF;