嘿我想在sql中编写一个插入切换参数的函数。 我的代码:
CREATE PROCEDURE `p_add_client`(IN p_username VARCHAR(45),IN p_reach VARCHAR(45),IN p_purchase VARCHAR(45))
BEGIN
set @str = ('INSERT INTO t_', p_username,'(Purchase,Reach) VALUES (p_purchase,p_reach)');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;
但它不起作用。我收到错误代码1064.任何人都可以帮助我吗?
答案 0 :(得分:1)
您遗失CONCAT()
:
set @str = CONCAT('INSERT INTO t_', p_username, '(Purchase, Reach) VALUES (p_purchase, p_reach)');
但是,执行时会出现错误,因为变量未知。所以,你可以写:
set @str = CONCAT('INSERT INTO t_', p_username, '(Purchase, Reach) VALUES (p_purchase, p_reach)');
prepare stmt from @str;
execute stmt using p_purchase, p_reach;
deallocate prepare stmt;
当然,这一切都暗示了一个非常糟糕的数据库架构。为什么每个用户都有一个单独的表,而不是所有用户的单个表中的行?这可能是解决实际问题的一些神秘原因,但这种方法更常见地表明解决方案架构存在问题。