是否可以使用MySQL在存储过程中动态创建表的名称?

时间:2014-02-25 17:14:46

标签: mysql sql select stored-procedures sql-delete

看看这段代码。它应该告诉你我想要做什么:

SELECT type from barcodes where barcode = barcodeApp INTO @barcodeType;
IF (@barcodeType = 'videogame') THEN 
    SET @barcodeType = 'game';
END IF;

DELETE FROM @barcodeType + itemdetails_custom
WHERE barcode = barcodeApp
AND username = usernameApp;

正如您所看到的,在DELETE FROM部分,我想从上一个查询的结果中动态组合表名。这可能吗?

另外,如果您发现上述问题存在问题,请告知我们。我显然不是MySQL专家。

1 个答案:

答案 0 :(得分:1)

您需要使用Prepared Statement来执行动态准备的查询。

请尝试以下代码:

set @del_query = concat( 'DELETE FROM ', @finalType )
set @del_query = concat( '\'', itemdetails_custom, '\'' );
set @del_query = concat( @del_query, ' WHERE barcode = \'', barcodeApp, '\'' );
set @del_query = concat( @del_query, ' AND username = \'', usernameApp, '\'' );

prepare stmt from @del_query;
execute stmt;
drop prepare stmt; -- deallocate prepare stmt; 

注意:我认为barcodeAppusernameApp是变量。否则,请在上面的查询中删除它们周围的单引号。