带CURSOR和FETCH的MYSQL变量

时间:2016-02-26 20:45:01

标签: mysql

我想使用表名并运行一个表名为变量的语句。我使用了游标/提取,但是当我使用变量运行语句时,它没有使用变量的值,但似乎只是使用了variable_name本身。我已经看到了concat的例子,其中定义了另一个变量但是如果我只想在COMMAND中引用表名怎么办?

DELIMITER $$

DROP PROCEDURE IF EXISTS test $$
CREATE PROCEDURE test()
BEGIN

DECLARE done INT DEFAULT FALSE;
DECLARE v_table_name TEXT;

DECLARE cur1 CURSOR FOR
SELECT TABLE_NAME FROM information_schema.tables where table_schema = 'rt';

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done= TRUE;

OPEN cur1;

myloop: loop
  FETCH cur1 INTO v_table_name;

  IF done THEN
    LEAVE myloop;
  END IF;

  COMMAND table v_table_name;
END loop;

close cur1;
END $$

1 个答案:

答案 0 :(得分:0)

如果通过 COMMAND 表示您希望在另一个SQL语句中使用变量的值作为标识符 ...您可能能够使用预准备语句(在MySQL存储程序的上下文中)。

参考:https://dev.mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

作为可能的样子的一个简单例子:

  SET @sql = CONCAT('select * from `',v_table_name,'` limit 1');
  PREPARE stmt1 FROM @sql;
  EXECUTE stmt1;
  DEALLOCATE PREPARE stmt1;
  SET @sql = NULL;

请注意,此方法不受SQL注入漏洞影响。

如果那不是你想要的,我不知所措。我不明白你所指的是 COMMAND