我从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中完成,谢谢!我整晚都在谷歌搜索答案。
答案 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);
这是正确的。