如何将带逗号的字符串(VARCHAR)传递给存储过程?

时间:2017-11-25 11:28:05

标签: mysql arrays string stored-procedures comma

我从here复制了代码并进行了少量更改

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中完成,谢谢!我整晚都在谷歌搜索答案。

1 个答案:

答案 0 :(得分:0)

SET @sql = CONCAT("SELECT (" , list_of_ids, ")");

为什么在这行代码中需要那些内部括号?这就是你遇到问题的关键所在。 但是,如果您希望这些数字作为过程本身的字符串,那么代码是正确的,但您已经以错误的方式传递了值。它应该如下传递。

CALL updateTable('\'1,2,3\''); OR
CALL updateTable("'1,2,3'");

如果有任何问题,请告诉我?

示例是正确的,它有更新语句但你有一个select语句。区别在于您的代码结果为:

select (1,2,3)

在这种情况下,'('超出范围。

你的例子就像

update table1 SET ..... where id in (1,2,3);

这是正确的。