Вопрос

Я родом из мира SQL server, где у нас был uniqueidentifier.Есть ли эквивалент в oracle?К этому столбцу будут часто обращаться с запросами, поэтому ключевым фактором является производительность.

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

Это было полезно?

Решение

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

Этот блог изучал относительные показатели.

Другие советы

Как указывали другие, использование 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 как отмечалось автор: Стивен Фойерштейн.

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

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

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

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

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

Вы можете реализовать его самостоятельно, используя RAW (что-то вроде боли) или CHAR .Производительность запросов, которые ОБЪЕДИНЯЮТСЯ в поле CHAR, снизится (возможно, на целых 40%) по сравнению с использованием целого числа.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top