2014-02-25 54 views
0

看看这段代码。它应该告诉你什么是我想要做的事:是否可以使用MySQL动态创建存储过程中的表名称?

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专家。

+0

什么是'barcodeApp'和'usernameApp'?变量或列名称? –

+0

是的,从用户发送到sproc的变量 –

回答

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是变量。否则,请在上面的查询中移除它们周围的单引号。

+0

Works!尽管你忘记了itemdetails_custom的单引号。 :) –

相关问题