0%

MySQL表名作为变量的查询

在应用中,很多会用到数据库的存储过程,一般都会在程序里面实现数据库的逻辑。

但有时候要快速的获取某个值,逻辑比较复杂的时候,可能会用到存储过程。

比如接下来的案例,会把数据库的表作为一个变量传入。

1
2
3
4
5
6
7
8
9
10
11
12
13
DROP PROCEDURE IF EXISTS getInfo;
DELIMITER $$
CREATE PROCEDURE getInfo(IN tableName VARCHAR(100), IN id INT, OUT name VARCHAR(100))
BEGIN

SET @stmt := CONCAT("SELECT name INTO @var FROM ", tableName, " WHERE id = ", id);
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET name := @var;
END$$
DELIMITER ;

当创建好存储过程以后,可以通过以下方式调用。

1
2
3
SET @tableName := "tb_user";
CALL getInfo(@tableName, 4, @name);
SELECT @name;

如果不写存储过程,还可以通过执行下面代码的方式获取结果。

1
2
3
SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;
1
SET @group = (SELECT `group` FROM user WHERE user = @user);

或者

1
SELECT `group` INTO @group FROM user WHERE user = @user;