Вы можете использовать аналитическую функцию row_number
в двух подзапросах и различной логике, чтобы упорядочить signer
в предложении order by
, а затем объединить их на основе этого (rn
). Это предотвратит повторяющиеся имена как случайные значения.
With dataa(signer, minl) as
(Select signer,
min(length(signer))
over () as minl from table),
dataa_rand(signer, rnrand, rnnorm) as
(Select signer,
row_number()
over (order by substr(signer, dbms_random.value * (minl-1), 1)) as rnrand,
row_number()
over (order by signer) as rnnorm
from dataa)
--
Select a.signer, b.signer
From dataa_rand a join dataa_rand b
On (a.rnnorm = b.rnrand)
Вы можете использовать любую логику для заказа signer
. Мой запрос - только мысль в правильном направлении.
Приветствия !!