Основная странность, происходящая здесь, это SELECT ROWNUM FROM DUAL CONNECT BY...
- клудж, который дает вам увеличивающиеся числа, начиная со значения BOOKS.START_NUMBER; тогда они, кажется, используются в качестве первичных ключей в таблице VOUCHER.
Действительно, это признак ужасной базовой модели данных: отслеживание «начального числа» и «единиц» в таблице - это похоже на массив C, испорченный в базе данных.
Если вы тратите время на перенос этого с Oracle на MySQL, серьезно подумайте над исправлением модели данных. Возможно, вы хотите:
- добавить столбец book_id в таблицу VOUCHER и последующий внешний ключ в таблицу BOOK
- сделать столбец VOUCHER_NUMBER в новой таблице VOUCHER в MySQL типом автоинкремента, чтобы можно было устранить весь беспорядок начальных чисел / единиц
Имея такие, используйте любой язык, который вы используете для реализации бизнес-логики в MySQL и реализуйте этот псевдокод:
for 1 to BOOK.units loop
INSERT INTO VOUCHER (
-- VOUCHER_NUMBER handled by auto-increment
BOOK_ID
, DENOMINATION
)
SELECT
b.ID
, b.DENOMINATION
FROM BOOK b
WHERE b.ID = [book ID];
end loop