2017-11-25 292 views
1

我从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上搜索答案。

回答

0
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); 

这是正确的

+0

感谢您的澄清,但现在我迷失在我想达到的目标中 此代码现在生成一列“'1','2','3'”和一行“'1” '2','3'“,我想要一个桌面智慧h一列“姓名”和三行。 我想插入多个值到表中,我想从参数中获取这些值。因此,我需要在运行时创建一个表,并在表的每一行中使用“数组”中的值。 编辑:我不能在评论中表。 – Mendess

+0

意味着您需要三列中的数据,即一列。 1 2和3在不同行中的值?或者你想根据传递的ID来选择结果? –

+0

我想要一列和三行数据。 – Mendess

相关问题