如何将包含逗号的字符串(VARCHAR)传递给存储过程?
问题描述:
我从here复制的代码,并做出最小的变化如何将包含逗号的字符串(VARCHAR)传递给存储过程?
DELIMITER $$
CREATE PROCEDURE updateTable (IN list_of_ids VARCHAR(32))
BEGIN
set @sql = concat("SELECT (" , list_of_ids, ")");
PREPARE stmt FROM @sql;
EXECUTE stmt;
END$$
call updateTable('1,2,3');
但是,当我打电话,我得到Error 1241: Operand should have one 1 column(s)
我用"
代替'
周围的参数,它仍然给了同样的错误。我也尝试用"1,2,3"
字符串声明一个变量,但它仍然失败,我试图call updateTable(concat("1,","2,","3"));
无济于事。
我也试图改变程序,预计3个参数,我得到了预期的错误Error 1318: Incorrect number of arguments
这一切正在做的MySql如果有人知道我错过了,谢谢!我一直在Google上搜索答案。
答
SET @sql = CONCAT("SELECT (" , list_of_ids, ")");
为什么在这行代码中需要这些内部括号?这是你遇到问题的地方。 但是,如果你想要这些数字作为过程本身的字符串,那么代码是正确的,但你已经错误地传递了值。它应该通过如下。
CALL updateTable('\'1,2,3\''); OR
CALL updateTable("'1,2,3'");
让我知道是否有任何问题?
该示例是正确的,它有更新语句,但您有一个选择语句。所不同的是你的代码的结果:
select (1,2,3)
在“(”这种情况下的意义超出范围
和你的榜样会像
update table1 SET ..... where id in (1,2,3);
这是正确的
。
感谢您的澄清,但现在我迷失在我想达到的目标中 此代码现在生成一列“'1','2','3'”和一行“'1” '2','3'“,我想要一个桌面智慧h一列“姓名”和三行。 我想插入多个值到表中,我想从参数中获取这些值。因此,我需要在运行时创建一个表,并在表的每一行中使用“数组”中的值。 编辑:我不能在评论中表。 – Mendess
意味着您需要三列中的数据,即一列。 1 2和3在不同行中的值?或者你想根据传递的ID来选择结果? –
我想要一列和三行数据。 – Mendess