【问题标题】:How do I pass a string (VARCHAR) with commas to a stored procedure?如何将带逗号的字符串 (VARCHAR) 传递给存储过程?
【发布时间】:2018-05-09 04:30:08
【问题描述】:

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

【问题讨论】:

    标签: mysql arrays string stored-procedures comma


    【解决方案1】:
    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'”。我想要一个包含一列“名称”和 3 行的表格。我想将多个值插入到一个表中,我想从一个参数中获取这些值。因此,我需要在运行时创建一个表格,其中包含一列以及表格每一行中“数组”中的值。编辑:我无法在 cmets 中制作表格。
    • 意味着您需要三行一列的数据,即。 1 2 和 3 在单独的行中的值?或者您想根据传递的 id 选择结果?
    • 我想要一列三行的数据。
    • 您是要从不同的表中选择数据还是只想要在单独的行中传递的值?
    • 感谢您的回答,但我更改了谷歌搜索并找到this 解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多