MySQL存储过程从列表

时间:2016-02-03 06:24:26

标签: mysql stored-procedures jdbc

如何编写MySQL存储过程来插入可变大小列表中的值?更具体地说,我需要将数据插入到一个父表中,从插入中获取ID,然后将可变数量的子记录与新ID一起插入到一对多关系中的另一个表中。我的架构看起来像这样:

表A:

table_a_id -- Auto Increment
counter
some_data...

表B:

table_b_id -- Auto Increment
table_a_id -- Foreign Key Constraint
some_data_from_list...

到目前为止,我的存储过程如下所示:

DELIMITER ;;
CREATE PROCEDURE insert_group_alert(
  IN _some_data_a         VARCHAR(255),
  IN _data_list_b         TEXT,
)
  BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
      ROLLBACK;
    END;
    START TRANSACTION;

    INSERT INTO TableA (
      some_data,
      counter
    )
    VALUES (
      _some_data_a,
      1
    )
    ON DUPLICATE KEY UPDATE
      counter          = counter + 1;

    SELECT last_insert_id()
      INTO @newId;

LIST INSERT ???:
    INSERT INTO TableB (
      table_a_id, some_data
    ) VALUES (
      @newId,
      list_item,
    );
END LIST INSERT ???

    COMMIT;
  END ;;
DELIMITER ;

我的想法是通过逗号分隔的字符串传入要插入表B的项目列表。值是字符串。我不确定在LIST INSERT部分做什么。我需要某种循环吗?到目前为止,我这个存储过程是否有正确的方法来执行此操作?我不想做批处理,因为我可能在列表中有数百甚至数千个项目。有更好的解决方案吗?我正在使用直接JDBC。

1 个答案:

答案 0 :(得分:3)

是的,您需要一个循环,您可以使用substring_index()来获取列表中的值。解决方案基于this SO topic

的答案
 
NameVirtualHost localhost
<VirtualHost localhost>
DocumentRoot D:/xampp/htdocs/bonfire
ServerName localhost
<VirtualHost>

current_affiliate_company