Ответ 1
CREATE table test (testguid RAW(16) default SYS_GUID() )
Этот блог изучил относительную производительность.
Я прихожу из мира SQL-сервера, где у нас есть uniqueidentifier. Есть ли эквивалент в оракуле? Этот столбец будет часто запрашиваться, так что производительность - это ключ.
Я генерирую GUID в .Net и передам его Oracle. По двум причинам он не может быть создан оракулом, поэтому я не могу использовать последовательность.
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 как указано Стивеном Фейерштейном.
Если я правильно понял вопрос, вы хотите создать уникальный идентификатор, когда вы вставляете строку в db.
Вы можете использовать последовательность, чтобы сделать это. ссылка здесь
После того, как вы создали свою последовательность, вы можете использовать ее следующим образом:
INSERT INTO mytable (col1, col2) VALUES (myseq.NEXTVAL, 'some other data');
GUID не используются в Oracle, как в MSSQL, мы, как правило, имеем поле NUMBER (не нулевой и первичный ключ), последовательность и триггер для вставки для его заполнения (для каждой таблицы).
RAW (16), по-видимому, является предпочтительным эквивалентом для уникального типа MS SQL.
В Oracle нет уникального идентификатора.
Вы можете реализовать его самостоятельно, используя RAW (вид боли) или CHAR. Производительность по запросам, которые JOIN в поле CHAR пострадает (возможно, до 40%) по сравнению с использованием целого числа.
Если вы делаете распределенные/реплицируемые базы данных, это может стоить. В противном случае просто используйте целое число.
Общая практика использования Oracle заключается в создании искусственного ключа. Это столбец, определенный как число. Он заполняется через последовательность. Он индексируется/ограничен с помощью определения первичного ключа.