在 MySQL 中,使用 PREPARE
和 EXECUTE
执行动态 SQL 语句时,对于 INTO
子句确实不能直接使用 DECLARE
定义的变量。
原因是 DECLARE
定义的变量通常是在存储过程或函数的开始部分进行声明,并且其作用域主要在存储过程或函数内部的特定块中。而 PREPARE
和 EXECUTE
执行动态 SQL 语句的上下文与存储过程内部的普通代码块稍有不同。
而使用 SET
提前定义的用户变量在整个会话中都有一定的可见性,并且可以在动态 SQL 语句执行时被正确地识别和赋值。
以下是一个示例展示如何使用 SET
定义的变量在动态 SQL 中接收结果:
PREPARE stmt FROM 'SELECT COUNT(*) INTO @result FROM your_table';
EXECUTE stmt;
SELECT @result;
DEALLOCATE PREPARE stmt;
如果你希望在存储过程中使用动态 SQL 并将结果赋值给一个变量,可以考虑使用 SET
定义的用户变量来实现。