Сложно понять, что происходит из этого фрагмента кода, но если вы хотите заполнить новые таблицы данными в случайном порядке из базовых таблиц, в которых есть данные, вы можете подумать о генерации случайных значений, а затем упорядочении row_number ими, чтобы получить псевдо-первичный ключ (целое число, с увеличением):
SELECT
t.*,
row_number() over(order by dbms_random.value(1,10)) as pseudopk
FROM
table
Например, у вас есть базовые таблицы данных (или cte), например:
BasePerson
Name, Age
--------
John, 20
Mary, 30
BaseAddress
City
----
New York
Paris
Berlin
INSERT INTO RealAddress(ID, City)
SELECT * FROM
(
SELECT row_number() over(order by dbms_random.value(1,10)) pk, a.City
FROM BaseAddress
)
WHERE pk < 3 --2 people need 2 address
INSERT INTO RealPerson(ID, Name, Age, AddressID)
SELECT pk, Name, Age, pk
FROM(
SELECT
row_number() over(order by dbms_random.value(1,10)) pk,
a.Name,
a.Age
FROM BasePerson
)
Это не действительно имеет значение, что мы повторно используем число как для идентификатора человека, так и для его идентификатора адреса, потому что данные адреса были рандомизированы, когда они были вставлены, так что это «люди в случайном порядке относительно их pk, связанные с адресами в случайном порядке относительно адрес pk "