Передайте списки внешних ключей переменной длины в качестве аргументов хранимой процедуре через JDBC, а затем используйте списки для вставки строк в таблицу. - PullRequest
0 голосов
/ 19 ноября 2011

Мне нужно создать одну транзакцию / хранимую процедуру, которая принимает два списка внешних ключей и вставляет новые строки в таблицу из этих внешних ключей.

В частности, у меня есть таблица, в которой есть order_ids и item_idsв соответствии с заказом.Мне нужно добавить в эту таблицу при отправке заказов.

Чтобы подвести итог в коде, я хотел бы сделать:

DELIMITER ##
BEGIN
CREATE STORED PROCEDURE addOrder(IN itemIds VARCHAR(255), IN orderIds VARCHAR(255))
// ----- SQL Equivalent of -----
// for (int i = 0; i < itemIds.length; ++i)
// INSERT INTO Items_Ordered(item_id, order_id) VALUES(itemIds[i], order_ids[i]);
// -----------------------------
END ##
DELIMITER ;

Так что в Java, я мог бы тогда сделать что-то вроде:

String listOfItems = '1, 2, 6, 7, 8';
String listOfOrders = '2, 1, 99, 82, 7';
PreparedStatement ps = connection.prepareCall("CALL addOrder(" + listOfItems + ", " + listOfOrders + ")");
ps.executeUpdate();

Есть идеи?

РЕДАКТИРОВАТЬ # 1:

Мне очень, очень, очень не нравится это хакерское решение: Передать массив в сохраненныйпроцедура

РЕДАКТИРОВАТЬ # 2:

Другое решение, которое я думал, было создать временную таблицу в хранимой процедуре с вводом, но я также не знаю, как это сделать.

1 Ответ

1 голос
/ 19 ноября 2011

Создайте функцию разделения строк по этим строкам:

http://kedar.nitty -witty.com / blog / mysql-хранимая-процедура-разделить-разделить-строки-в-строках

Затем вы можете разделить запятую строку на отдельные значения для вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...