Pergunta

Estou vindo do mundo o servidor SQL onde tivemos uniqueidentifier. Existe um equivalente no Oracle? Esta coluna será frequentemente consultado por isso o desempenho é a chave.

Eu estou gerando o GUID na Net e será passá-la para Oracle. Por algumas razões, não pode ser gerado pela Oracle, então não posso usar seqüência.

Foi útil?

Solução

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

Este blog estudou o desempenho relativo.

Outras dicas

Como os outros, há um acerto de desempenho usando GUIDs em comparação com seqüências numéricas. Dito isto, há uma função chamada " SYS_GUID () " disponível desde Oracle 8i que fornece a matéria-equivalentes:

SQL> SELECT SYS_GUID() FROM DUAL;

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

A função poderia ser criado para retornar um GUID formatado:

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 ;
/

Assim, retornando uma string intercambiáveis:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

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

Uma nota de cautela deve ser feito que algumas plataformas da Oracle retornar valores únicos semelhantes, mas ainda de GUIDs como observado por Steven Feuerstein.

Se eu entendi a pergunta corretamente, você deseja gerar uma identificação única quando você inserir uma linha no db.
Você pode usar um seqüência para fazer isso. aqui
Depois de ter criado a sua seqüência que você pode usá-lo como este:

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

RAW (16) é, aparentemente, o equivalente de preferência para o tipo de identificador exclusivo MS SQL.

GUIDs não são tão usados ??no Oracle como em MSSQL, que tendem a ter um campo de número (não nulo & chave primária), uma seqüência, e um gatilho de inserção para preenchê-lo (para cada tabela).

Não há uniqueidentifier em Oracle.

Você pode implementar um você mesmo usando RAW (um tipo de dor) ou CHAR. Desempenho em consultas que se unem em um campo CHAR sofrerá (talvez tanto quanto 40%) em comparação com o uso de um número inteiro.

Se você está fazendo distribuídas / bancos de dados replicados, o impacto no desempenho vale a pena. Caso contrário, basta utilizar um inteiro.

A prática geral usando o Oracle é criar uma chave artificial. Esta é uma coluna definida como um número. Ele é preenchida por meio de uma sequência. É indexada / restrita através de uma definição de chave primária.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top