MySql存储过程选择表

时间:2009-10-30 10:02:42

标签: mysql stored-procedures

我的数据库中有多个表用于(类似但不同)不同的产品。

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


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 ;

3 个答案:

答案 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具有特定值的行?