我想使用表名并运行一个表名为变量的语句。我使用了游标/提取,但是当我使用变量运行语句时,它没有使用变量的值,但似乎只是使用了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 $$
答案 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
。