Генерация строк

Используется функция dbms_random.string, которые принимает в себя два параметра:

  • opt - указывает какого типа строку возвращать
    Значение Что вернет функция?
    'u','U' только буквы верхнего регистра
    'l','L' только буквы нижнего регистра
    'a','A' только буквы нижнего и верхнего регистра
    'x','X' цифры и буквы верхнего регистра
    'p','P' цифры, буквы нижнего и верхнего регистра, спецсимволы
  • len - количество возвращаемых символов

Примеры:

select dbms_random.string('u',7) from dual; --результат: OKSFUIE select dbms_random.string('L',10) from dual; --результат: qbyoameqyj select dbms_random.string('a',5) from dual; --результат: fITsc select dbms_random.string('x',8) from dual; --результат: P6MYK0ZK select dbms_random.string('P',10) from dual; --результат: {X6YIP_h*.

Генерация чисел

Используется функция dbms_random.string, которые принимает в себя два параметра (диапозон):

  • low - нижнее значение генерируемого числа
  • high - верхнее значение генерируемого числа

По умолчанию генерируется число длиной 40 символов, параметры определяют диапозон целого числа, все остальное уходит в десятичную часть, обычно чтобы это избежать используют функцию round.

Примеры:

select dbms_random.value(1,100) from dual; --результат: 69,11410087309802826397156663971321784909 select round(dbms_random.value(1,100)) from dual; --результат: 75

Генерация количества строк и их первичного ключа

Здесь нам помогут конструкция connect by level. Генерировать значение первичного ключа будем с помощью служебного слова level.

select level as id_row ,round(dbms_random.value(1,100)) as gen_num from dual connect by level <= 5;

Результат:
генерация строк через connect by level

Генерация данных для таблицы

На основании вышеизложенного материала, ниже приведен пример скрипта, который будет генерировать первичный ключ, номер, дату и сумму заказа.

select level as id_row ,dbms_random.string('u',7)||to_char(round(dbms_random.value(1,1000000))) as order_num ,to_date(to_char(round(dbms_random.value(1,28))) ||'.' ||to_char(round(dbms_random.value(1,12))) ||'.' ||'2021') as order_date ,round(dbms_random.value(100,500000),2) as order_sum from dual connect by level <= 5;

Результат:
генерация данных для таблиц oracle


Спасибо за внимание!