MySql - функция и процедура по обработке Ids записей
у меня есть процедура. которая вызывает ряд функций по заполнению связанных таблиц. начиная от родительской таблицы - users.Эта процедура в качестве параметра принимает число записей. которые должны быть созданы. Таким образом процедура содержит цикл. в каждой итерации которого происходит создание записи в связанных таблицах
Первая из функций заполняет запись в таблице users и возвращает id-созданной записи. Вот эти Ids нужно сохранить в список Bigint. Затем создать процедуру, которая в качестве входного параметра возьмет данный список и пoочереди прочитав id user удалит записи об этих пользователях.
Вот небольшой пример функций (таблиц подчинных здесь одна. а может быть 2 или 3) :
– Первая функция по вставке записи в таблицу books
DROP FUNCTION IF EXISTS insert_one_query_books;
DELIMITER #
CREATE FUNCTION `insert_one_query_books` () RETURNS BIGINT
NO SQL
BEGIN
DECLARE id_generated BIGINT;
DECLARE author_book varchar(255);
DECLARE age_book INT;
/*для первой таблицы*/
SET author_book = random_string(10, 'Book1234');
SET age_book = random_integer(100);
INSERT INTO books (author, age)
VALUES (author_book, age_book);
SET id_generated = last_insert_id();
RETURN id_generated;
END#
SELECT insert_one_query_books ();
– Вторая функция по вставке записи в таблицу authors
DROP FUNCTION IF EXISTS insert_one_query_authors;
DELIMITER #
CREATE FUNCTION `insert_one_query_authors` (id_book BIGINT) RETURNS BIGINT
NO SQL
BEGIN
DECLARE id_generated BIGINT;
DECLARE author_name varchar(255);
DECLARE age_book INT;
SET author_name = random_string(10, 'Book1234');
SET age_book = random_integer(100);
INSERT INTO authors (author_name, age, id_book)
VALUES (author_name, age_book, id_book);
SET id_generated = last_insert_id();
RETURN id_generated;
END#
SELECT insert_one_query_authors (15);
– Функция-цикл объединяющая первые две.
DROP PROCEDURE IF EXISTS books_and_authors_inserts_with_fucntions;
/* Создание процедуры по вставке значений в 2 таблицы с испльзованием для каждой таблицы
своей функции, которая уже будет генерировать значение для нее*/
DELIMITER #
CREATE PROCEDURE `books_and_authors_inserts_with_fucntions`(max_id INT)
BEGIN
DECLARE counter INT DEFAULT 1;
/*установили счетчик, начальное значение счетчика 1*/
DECLARE id_book BIGINT;
DECLARE id_author BIGINT;
start transaction;
WHILE counter <= max_id
DO
SET id_book = insert_one_query_books ();
SET id_author = insert_one_query_authors (id_book);
SET counter = counter + 1;
END WHILE;
commit;
END #
CALL books_and_authors_inserts_with_fucntions(3);
Мне например, нужно аккумулировать значения, которые получаю вот отсюда :
SET id_book = insert_one_query_books ();
Получаю список id_book копирую из консоли и через какое то время, беру процедуру с циклом по удалению сразу нескольких записей и в цикле удаляю по одной, беря ID из списка, который ранее получил.
Или обновляю данные записей, которые есть в указанном списке.
Проблема в том, я не знаю как работать со списками.
версия MySQL 8 (я работаю с СУБД развернутой в Docker)
Может курсор как то может помочь. Но он вернет список строк, каждая строка - это ID в типе String (varchar). Ну а как тогда можно обработать этот список и брать из него значения и подставлять в инструкцию с ......
... WHERE id = ....
Есть ли идеи как это реализовать?