如何将带逗号的字符串 (VARCHAR) 传递给存储过程?
How do I pass a string (VARCHAR) with commas to a stored procedure?
我从 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 完成,如果有人知道我遗漏了什么,谢谢!我整晚都在谷歌上搜索答案。
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);
这是正确的。
我从 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 完成,如果有人知道我遗漏了什么,谢谢!我整晚都在谷歌上搜索答案。
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);
这是正确的。