Как я могу перевести ID FileNet ID в DB2/Oracle в дружественный GUID?
В документе IBM Technote " Как перевести уникальный идентификатор, отображаемый в FileNet Enterprise Manager, чтобы он соответствовал тому, что хранится в базах данных Oracle и DB2", описывается, как DB2 & Oracle хранит указатели в обратном порядке байтов. Как я могу преобразовать их в дружественный гид?
2 ответа
Решение
Следующий код работает в DB2, следуя рецепту из IBM Technote:
‘{’ concat upper(VARCHAR_FORMAT_BIT(
cast(substring(F.Object_id, 4, 1) concat
substring(F.Object_id, 3, 1) concat
substring(F.Object_id, 2, 1) concat
substring(F.Object_id, 1, 1) concat
substring(F.Object_id, 6, 1) concat
substring(F.Object_id, 5, 1) concat
substring(F.Object_id, 8, 1) concat
substring(F.Object_id, 7, 1) concat
substring(F.Object_id, 9) as char(16)), ‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’)) concat ‘}’ as object_id
"Cast as char(16)" - это уловка - приведение к varchar(16) по крайней мере не работает в DB2.
Вот до и после:
Предполагая, что object_id char(16) for bit data
, следующее выражение возвращает то же самое.
'{'||translate(
'GHEFCDAB-KLIJ-OPMN-QRST-UVWXYZ012345'
, hex(F.object_id)
, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345')||'}' as object_id