Oracle SQL - создание уникального идентификатора пользователя на основе шаблона - PullRequest
0 голосов
/ 22 января 2019

У меня есть требование для генерации уникального идентификатора пользователя с использованием процедуры Oracle SQL.Для пользователя John Smith идентификатор пользователя должен быть создан с использованием следующих условий:

  1. Первая буква имени + фамилия: jsmith

  2. В случае, если есть другой пользователь с таким же именем: первая буква имени + вторая буква имени + фамилия: josmith

  3. для другогодубликат: первая буква имени + вторая буква имени + третья буква имени + фамилия: johsmith

  4. для другого дубликата: первая буква первогоимя + вторая буква имени + третья буква имени + четвертая буква имени + фамилия: johnsmith

  5. Мы продолжаем итерацию, пока не исчерпаем всебуквы первого имени

  6. Когда у нас закончились буквы имени, а дубликаты все еще есть, мы добавляем число в конце: johnsmith1

  7. Для дальнейших дубликатов мы продолжаем увеличиватьчисло в конце: johnsmith1, johnsmith2 и т. д.

Я ищу идеи в качестве отправной точки для оптимизированного и масштабируемого решения.

1 Ответ

0 голосов
/ 23 января 2019

Этот запрос создает первые 100 предложений по именам учетных записей на основе имени и фамилии (не стесняйтесь настраивать количество сгенерированных параметров).

with acc as (
select rownum id, 'John' fname, 'Smith' lname from dual connect by level <=100
) 
select 
id,
case when id <= length(fname) then 
substr(fname,1,id)||lname
else
fname||lname||to_char(id-length(fname)) end as account_name
from acc;

        ID ACCOUNT_NAME                                    
---------- -------------------------------------------------
         1 JSmith                                            
         2 JoSmith                                           
         3 JohSmith                                          
         4 JohnSmith                                         
         5 JohnSmith1                                        
         6 JohnSmith2                                        
         7 JohnSmith3                                        
         8 JohnSmith4                                        
         9 JohnSmith5  
 ....  

Если у вас есть таблица с назначенными именами учетных записей,скажем user_accounts, вы можете открыть этот курсор и получить первый ряд.Это обеспечит новое бесплатное имя учетной записи в соответствии с вашими правилами.

with acc as (
  select rownum id, 'John' fname, 'Smith' lname from dual connect by level <=100
), acc2 as (
select 
  id,
  case when id <= length(fname) then 
   substr(fname,1,id)||lname
  else
   fname||lname||to_char(id-length(fname)) end as account_name
from acc)
select id, account_name from acc2
where account_name not in 
    (select account_name from user_accounts)
order by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...