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 = ....

Есть ли идеи как это реализовать?


Ответы (0 шт):