Mysql 当表没有任何行时,过程给出错误
我有以下数据库表:表名-dim_模块Mysql 当表没有任何行时,过程给出错误,mysql,Mysql,我有以下数据库表:表名-dim_模块 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
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_模块并没有任何行,那个么程序就不小心了,我得到了错误
错误代码:1064。您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获取第1行中接近“NULL”的正确语法
请帮助处理空表。可能是因为
@sql
为空
尝试使用IFNULL将其设置为某个值
SET @sql = CONCAT('SELECT alternative, ', IFNULL(@sql,'somecolumnor*here'), ' FROM sgwebdb.dim_module GROUP BY alternative');
或者检测到
@sql
为空并执行其他操作。在第二次中使用@sql之前,您可以先检查它,然后选择它:
IF @sql
THEN
SET @sql = CONCAT('SELECT alternative, ', @sql, ' FROM sgwebdb.dim_module GROUP BY alternative');
prepare stmt from @sql;
END IF;
如果Dim_模块没有任何行,您希望得到任何有意义的结果吗?