我的数据库中有多个表用于(类似但不同)不同的产品。
是否可以根据参数选择要使用的表格(如下所示)? (这样可以节省我有相同程序的多个相似副本)。
DELIMITER $$
DROP PROCEDURE IF EXISTS `dostuff` $$
CREATE PROCEDURE `dostuff`(IN prod_code VARCHAR(10))
BEGIN
IF INSTR(prod_code, 'product_a') THEN
myTable = product_a_table
ELSE IF INSTR(prod_code, 'product_b') THEN
myTable = product_b_table
END IF
-- do stuff on myTable such as SELECT and UPDATE
END $$
DELIMITER ;
答案 0 :(得分:2)
可以创建如下命令:
SET @query := CONCAT("REPAIR TABLE ", @tableName);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
如您所见,您可以将所需的任何字符串/变量推送到该命令中(使用任何您想要的变量。
答案 1 :(得分:0)
我认为在查询中不可能有变量表名。
我们自己的Bill Karwin解释了here
表名,列名等不能以您的方式动态 描述。由于许多原因,SQL语言不允许这样做。
例如,查询优化器无法决定 要使用哪个索引,如果它在分析时不知道哪些表 并且正在查询列。
答案 2 :(得分:0)
我认为问题实际上是您的数据库是否具有所需的规范化级别。为什么“ProductGroup”不是sinlge产品表中的字段,因此允许您选择ProductGroup具有特定值的行?