如何编写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。
答案 0 :(得分:3)
是的,您需要一个循环,您可以使用substring_index()来获取列表中的值。解决方案基于this SO topic:
的答案NameVirtualHost localhost
<VirtualHost localhost>
DocumentRoot D:/xampp/htdocs/bonfire
ServerName localhost
<VirtualHost>current_affiliate_company