在应用中,很多会用到数据库的存储过程,一般都会在程序里面实现数据库的逻辑。
但有时候要快速的获取某个值,逻辑比较复杂的时候,可能会用到存储过程。
比如接下来的案例,会把数据库的表作为一个变量传入。
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;
|