我正在尝试使用用户定义的变量替代表名,这样我就可以使用mysql而不需要任何其他语言.
这个例子很简单 - 真正的脚本使用表名很多,最终用户更容易改变变量而不是搜索/替换.
SET @tablename = 'mytable';
SELECT * FROM @tablename;
Run Code Online (Sandbox Code Playgroud)
这不起作用,但显示了我需要的最终结果.
使用预备陈述:
SET @tablename = 'mytable';
SET @query = CONCAT('SELECT * FROM ', @mytable);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)
如果您的实际查询要复杂得多,您可以在一些存储函数中包装查询的构建:
DELIMITER //
CREATE FUNCTION GetQuery(tableName VARCHAR(50)) RETURNS VARCHAR(100)
BEGIN
DECLARE finalQuery VARCHAR(100);
SET finalQuery = CONCAT('SELECT * FROM ', tableName);
-- do something fancier with finalQuery here
RETURN finalQuery;
END //
DELIMITER ;
SET @query = GetQuery('mytable');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)
更好的是:在存储过程中执行所有操作:
DELIMITER //
CREATE PROCEDURE QueryTable(tableName VARCHAR(50))
BEGIN
SET @finalQuery = CONCAT('SELECT * FROM ', tableName);
PREPARE stmt FROM @finalQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @finalQuery = NULL;
END //
DELIMITER ;
CALL QueryTable('mytable');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4753 次 |
| 最近记录: |