Как я должен хранить GUID в Oracle?
Вопрос
Я родом из мира 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 является создание искусственного ключа.Это столбец, определенный как число.Он заполняется с помощью последовательности.Он индексируется / ограничивается с помощью определения первичного ключа.