Подтвердить что ты не робот

Как хранить GUID в Oracle?

Я прихожу из мира SQL-сервера, где у нас есть uniqueidentifier. Есть ли эквивалент в оракуле? Этот столбец будет часто запрашиваться, так что производительность - это ключ.

Я генерирую GUID в .Net и передам его Oracle. По двум причинам он не может быть создан оракулом, поэтому я не могу использовать последовательность.

4b9b3361

Ответ 1

CREATE table test (testguid RAW(16) default SYS_GUID() ) 

Этот блог изучил относительную производительность.

Ответ 2

Как утверждали другие, есть хит производительности с использованием GUID по сравнению с числовыми последовательностями. Тем не менее, существует функция с именем " SYS_GUID()", доступная после Oracle 8i, которая обеспечивает исходный эквивалент:

SQL> SELECT SYS_GUID() FROM DUAL;

SYS_GUID()
--------------------------------
248AACE7F7DE424E8B9E1F31A9F101D5

Для возврата отформатированного GUID может быть создана функция:

CREATE OR REPLACE FUNCTION GET_FORMATTED_GUID RETURN VARCHAR2 IS guid VARCHAR2(38) ;
BEGIN
    SELECT SYS_GUID() INTO guid FROM DUAL ;

    guid :=
        '{' || SUBSTR(guid,  1, 8) ||
        '-' || SUBSTR(guid,  9, 4) ||
        '-' || SUBSTR(guid, 13, 4) ||
        '-' || SUBSTR(guid, 17, 4) ||
        '-' || SUBSTR(guid, 21) || '}' ;

    RETURN guid ;
END GET_FORMATTED_GUID ;
/

Таким образом, возвращая сменную строку:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

GET_FORMATTED_GUID()
--------------------------------------
{15417950-9197-4ADD-BD49-BA043F262180}

Следует обратить внимание на то, что некоторые платформы Oracle возвращают похожие, но по-прежнему уникальные значения GUID как указано Стивеном Фейерштейном.

Ответ 3

Если я правильно понял вопрос, вы хотите создать уникальный идентификатор, когда вы вставляете строку в db.
Вы можете использовать последовательность, чтобы сделать это. ссылка здесь
После того, как вы создали свою последовательность, вы можете использовать ее следующим образом:

INSERT INTO mytable (col1, col2) VALUES (myseq.NEXTVAL, 'some other data');

Ответ 4

GUID не используются в Oracle, как в MSSQL, мы, как правило, имеем поле NUMBER (не нулевой и первичный ключ), последовательность и триггер для вставки для его заполнения (для каждой таблицы).

Ответ 5

RAW (16), по-видимому, является предпочтительным эквивалентом для уникального типа MS SQL.

Ответ 6

В Oracle нет уникального идентификатора.

Вы можете реализовать его самостоятельно, используя RAW (вид боли) или CHAR. Производительность по запросам, которые JOIN в поле CHAR пострадает (возможно, до 40%) по сравнению с использованием целого числа.

Если вы делаете распределенные/реплицируемые базы данных, это может стоить. В противном случае просто используйте целое число.

Ответ 7

Общая практика использования Oracle заключается в создании искусственного ключа. Это столбец, определенный как число. Он заполняется через последовательность. Он индексируется/ограничен с помощью определения первичного ключа.