【问题标题】:Insert Into using a variable with multiple values as a parameter使用具有多个值的变量作为参数插入到
【发布时间】:2015-12-11 12:32:19
【问题描述】:

我在使用我的数组作为参数时遇到了问题。我已经内爆了我的数组,因此它将显示带有括号的值,例如,list1 = (1),(2),(3)

BEGIN
CREATE TEMPORARY TABLE tmp (id Int NOT NULL  PRIMARY KEY);

INSERT INTO tmp (id) VALUES list1; //wont compile procedure
INSERT INTO tmp (id) VALUES (list1); //compiles however I can't put my array because the parentheses around the parameter ?
select * from tmp
END

Parameter -> Direction = IN, Name = list1, Type = Varchar, Length = 8000, Options=Charset

我不知道我做错了什么,任何帮助将不胜感激

更新:

我认为您不理解我要完成的工作。我在 list1 中有多个值,我试图插入。 list1= (1),(2),(3) 但是编译器只允许我使用带有括号的 list1,即使我已经用必要的括号填充了我的字符串。于是我尝试使用 '1),(2),(3' 但它只输出 1 这是第一个值

我在插入临时表时没有问题,我在使用数组(list1)进行插入时遇到问题......

【问题讨论】:

  • 你能给我们展示一个最小而完整的例子吗?这是在存储过程中吗? list1 是如何声明的?
  • @RichardSt-Cyr 它是一个 varchar(8000)
  • 编辑问题并向我们展示您得到的完整代码和错误
  • 请提供一个完整且最少的过程来复制问题。

标签: mysql


【解决方案1】:

不知道完整的上下文,我不知道这是否是最好的解决方案,但它是一个解决方案。

通过使用准备好的语句,我在类似的情况下取得了成功。在你的情况下,它可能看起来像

  SET @stmt := CONCAT("INSERT INTO t1 (id) VALUES ", list1);

  PREPARE p_stmt FROM @stmt;
  EXECUTE p_stmt;
  DEALLOCATE PREPARE p_stmt; 

【讨论】:

  • 在哪里?我刚刚测试了这个例子来仔细检查,它可以工作。
  • CONCAT('INSERT INTO t1 (id) VALUES ', list1, ';'); 也应该是单引号,而不是双引号!
  • 我同意单引号可能会导致其他 RDBMS 出现问题并且更可取。在这种情况下,分号不是必需的,但它也不会导致问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多