DB2 создает случайный, но уникальный идентификатор символа при вставке строки - PullRequest
0 голосов
/ 21 февраля 2020

В настоящее время у меня есть столбец в таблице DB2, который передается через веб-вызовы и процедуры с использованием значения с шифрованием символов. Это тип CHARACTER (13) с CSSID для шифрования.

Это стало огромной болью, чтобы приспособиться через несколько API, но изначально предназначалось для того, чтобы дать нам уникальный идентификатор для использования в вызовах, которые не были первичными key.

В DB2-400, что будет следующим лучшим вариантом, если строка из 13 или более символов уникальна и случайным образом создается при вставке, но не требует дешифрования (простая строка) ?

Есть ли для этого метод с достаточным тяготением? Мы не передаем защищенные данные, поэтому шифрование не требуется, нам просто нужен случайно созданный и уникальный символ

Ответы [ 3 ]

1 голос
/ 22 февраля 2020

Попробуйте hex(generate_unique()). Это уникальная CHAR(26) строка.
Или to_char(timestamp(generate_unique()), 'YYYYMMDDHH24MISSFF6'). Вы также можете играть в формате функции to_char . Может быть полезно использовать, скажем, обратный формат, например FF6SSMIHH24DDMMYYYY, чтобы избежать конфликта уникальных страниц индекса при большой активности вставки.

0 голосов
/ 22 февраля 2020

Звучит так, как будто вы используете GENERATE_UNIQUE()

Функция GENERATE_UNIQUE возвращает строку символов битовых данных длиной 13 байтов (CHAR (13) FOR BIT DATA)

На самом деле не имеет ничего общего с шифрованием ...

И, по моему мнению, это идеальное решение, генерирующее уникальное значение, отличное от простой цифры c. Так в чем же проблема?

0 голосов
/ 22 февраля 2020

Это комментарий, который не помещается в разделе комментариев.

У меня нет доступа к DB2-400 (больше), но я тестировал приведенный ниже код в DB2 10.5 для Linux.

create sequence seq1;

select concat('A', varchar_format(next value for seq1, '000000000000')) as my_id
from sysibm.sysdummy1;

Результат, если вы запустите его 4 раза подряд:

A0000000000001
A0000000000002
A0000000000003
A0000000000004

Возможно, в DB2-400 есть что-то эквивалентное.

...