Использование GUID в ORACLE

добавлено: 13 мар 17
понравилось:0
просмотров: 2530
комментов: 2

теги:

Автор: Myp3_u_K

Авторский курс. SQL от новичка до профессионала. Бесплатное вводное занятие. Сертификат. Записывайся!
Прокачаю до уровня БОГ!


GUID некоторая уникальная последовательность символов, в некоторых случаях, может использоваться в качестве первичного ключа.
Рассмотрим основные работы с GUID в ORACLE.

Получить GUID в ORACLE можно, воспользовавшись функцией
sys_guid()
запрос в этом случае будет выглядеть следующим образом
select sys_guid() from dual

результат
4A9B3CF364FB92CAE050A8C0670A0D3A
Для получения GUID в PL SQL используются несколько аналогичная команда
Следует так же отметить, что для ранения GUID в ORACLE используются следующие типы данных
raw(16) и varchar2(32);

следующие примеры демонстрируют работу c GUID в PL/SQL ORACLE
declare
  p_raw raw(16); 
begin
  p_raw := sys_guid;
  dbms_output.put_line(p_raw);
end;

результат 4A9B3CF3650092CAE050A8C0670A0D3A

declare
  p_vc2 varchar2(32);
begin
  p_vc2 := sys_guid;
  dbms_output.put_line(p_vc2);
end;

результат 4A9B3CF3652292CAE050A8C0670A0D3A

Часто бывает необходимо получить GUID в форматированном виде, для этого можно воспользоваться стандартными функциями ORACLE для работы со строками

select '{' || substr(sys_guid(), 1, 8) || '-' || substr(sys_guid(), 9, 4) || '-' ||
       substr(sys_guid(), 13, 4) || '-' || substr(sys_guid(), 17, 4) || '-' ||
       substr(sys_guid(), 20) || '}' as S_GUID
  from dual;


аналогично для PL SQL
declare
  p_vc2 varchar2(32);
begin
  p_vc2 := sys_guid;
  dbms_output.put_line('{'||substr(p_vc2,1,8)||'-'||substr(p_vc2,8,4)||'-'||substr(p_vc2,12,4)||'-'||substr(p_vc2,16,4)||'-'||substr(p_vc2,20,12)||'}');
end;

я встречался на практике с еще одним более экзотическим способом получения GUID в ORACLE , он заключался в использовании пакета DBMS_RANDOM и регулярных выражений
select regexp_replace(
    to_char(
        DBMS_RANDOM.value(0, power(2, 128)-1),
        'FM0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'),
    '([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{12})',
    '\1-\2-\3-\4-\5') from dual

Комментарии


  • в документации к 9му Ораклу приводятся 3 способа получения GUID (он же UUID - случайное 128 битноe целоe числo): Java, PL/SQL, SYS_GUID(). Последние 2 у вас описаны.

    https://oracle-base.com/articles/9i/uuid-9i

    Можно еще функцию на Java вызвать:

    CREATE OR REPLACE FUNCTION NEW_UUID RETURN VARCHAR2
    AS LANGUAGE JAVA
    NAME 'UUID.randomUUID().toString() return java.lang.String';
    /

  • Здесь
    [quote][src]select '{' || substr(sys_guid(), 1, 8) || '-' || substr(sys_guid(), 9, 4) || '-' ||
    substr(sys_guid(), 13, 4) || '-' || substr(sys_guid(), 17, 4) || '-' ||
    substr(sys_guid(), 20) || '}' as S_GUID
    from dual;[/src][/quote] ошибка. В последней группе должно быть[src]substr(sys_guid(), 21)[/src]



Необходимо войти на сайт, чтобы оставлять комментарии