2009-10-30 99 views
1

我的数据库中有多个表用于(类似但不同)产品。MySql存储过程选择表

是否可以根据参数(下面的示例)选择要使用的表格? (这将节省我有相同的过程多个相似的副本)。


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 ; 

回答

2

它可以创建这样的命令:

SET @query := CONCAT("REPAIR TABLE ", @tableName);    
PREPARE stmt FROM @query;    
EXECUTE stmt;    
DEALLOCATE PREPARE stmt; 

正如你所看到的,你可以把你想要的任何字符串/变量到该命令(使用变量,无论你想

0

我认为这是不可能有一个查询变量表名。

我们自己Bill Karwin解释here

表名,字段名等,不能在你 描述的方式动态。这是SQL语言不允许的,原因很多。

例如,如果查询优化器在分析时不知道要查询哪些表 和列,那么查询优化器将无法决定使用哪个索引 。

0

我认为真正的问题是您的数据库是否具有所需的标准化水平。为什么“ProductGroup”不是sinlge产品表上的字段,因此您可以选择产品组具有特定值的行?

+0

由于每个产品具有不同的参数集,因此需要唯一的表。 – user199559 2009-10-30 10:52:16

+0

为了增加进一步的复杂性,将来可能会增加参数集,并且我还需要使用不同的版本。 – user199559 2009-10-30 10:53:51

+0

在过去的10年里,我使用了大量的数据,但我发现很难相信,如果不在不同表格中复制类似的数据,就无法表示这些数据。 – Fenton 2009-11-02 08:22:10