Вниманию предлагается скрипт на Oracle SQL для генерации около 3 млн уникальных ФИО. Его можно использовать как для получения единичных записей, так и для вставки посредством INSERT SELECT всего массива. Результат работы скрипта может пригодиться для тестирования БД на больших объёмах данных или как "рыба" для демонстрационных версий программы.
Пример кода, генерирующий 27 записей:
SELECT "Name1". "Text" AS "Surname", "Name2". "Text" AS "FirstName", "Name3". "Text" AS "Patronymic", "Name1". "Text"||' '||"Name2". "Text"||' '||"Name3". "Text" AS "Name" FROM
(
SELECT "Text" , "Row" FROM
(
SELECT 'Иванов' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
UNION SELECT 'Петров' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
UNION SELECT 'Сидоров' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
)
ORDER BY dbms_random.value
) "Name1"
INNER JOIN
(
SELECT "Text" , "Row" FROM
(
SELECT 'Иван' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
UNION SELECT 'Пётр' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
UNION SELECT 'Сидор' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
)
ORDER BY dbms_random.value
) "Name2"
ON "Name2"."Row" = "Name1"."Row"
INNER JOIN
(
SELECT "Text" , "Row" FROM
(
SELECT 'Иванович' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
UNION SELECT 'Петрович' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
UNION SELECT 'Сидорович' AS "Text" , rownum AS "Row" FROM "tbl_DatabaseInfo"
)
ORDER BY dbms_random.value
) "Name3"
ON "Name3"."Row" = "Name1"."Row"
-- where rownum = 1
Если раскомментировать последнюю строку, получим одну запись. Для получения первых 10 записей условие модифицируется в:
Во вложении - полная версия, включающая 251 наиболее популярную русскую фамилию, 113 мужских и 118 женских имён и 53 отчества.
Кроме того, для реалистичности стоит учесть частотность имён, ведь Александров и Сергеев больше, чем Фролов и Илларионов. Имена в скрипте расположены начиная с более популярных, поэтому достаточно скопировать в коде начало списка несколько раз.