Mysql存储过程动态选择不带out变量

标签 mysql stored-procedures dynamic

当我没有使用 out 变量时,存储过程可以正常工作,但是当我执行没有 out 变量的存储过程时,会出现此错误:

MySQL said: #1327 - Undeclared variable: sp_result

代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test3`(OUT `sp_result` INT(11), IN `sp_where_param` VARCHAR(100), IN `sp_where_value` VARCHAR(100), IN `sp_table_name` VARCHAR(100))
NO SQL
BEGIN
DECLARE tbl_id VARCHAR(100);

SET tbl_id = CONCAT(sp_table_name,'_id');

SET @temp1=CONCAT('SELECT count(',tbl_id,') INTO sp_result FROM ',sp_table_name,' WHERE ',sp_where_param,' = \'',sp_where_value,'\'');
PREPARE stmt1 FROM @temp1;
EXECUTE stmt1;

END

也许没有 out 变量也不起作用:(

最佳答案

尝试使用用户变量 -

CREATE DEFINER = 'root'@'localhost'
PROCEDURE test3 (OUT `sp_result` int(11), IN `sp_where_param` varchar(100), IN `sp_where_value` varchar(100), IN `sp_table_name` varchar(100))
NO SQL
BEGIN
  DECLARE tbl_id varchar(100);

  SET tbl_id = CONCAT(sp_table_name, '_id');

  SET @temp1 = CONCAT('SELECT COUNT(', tbl_id, ') INTO @sp_result FROM ', sp_table_name, ' WHERE ', sp_where_param, ' = \'', sp_where_value, '\'');

  PREPARE stmt1 FROM @temp1;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;

  set sp_result = @sp_result;

END

...并添加 DEALLOCATE PREPARE 语句。

关于Mysql存储过程动态选择不带out变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050423/

相关文章:

php - 使用 PHP foreach() 循环将数据输入 MySQL 表时出现空字符串

mysql - 如何在mysql中显示分组依据?

c# - 动态与字典 [C#]

java - 在java中定义选择器状态

PHP - 下拉菜单(选择)无法正常工作到 while 循环

mysql - 我怎样才能得到所有远离我的值(value)的特定日期的结果?

c# - Oracle中如何获取存储过程参数类型和大小?

sql - 更高效的双重合并连接替代方案

php - LAST_INSERT_ID() 来自存储过程的结果

c - 在链接链内动态分配和添加结构