Domanda

Vengo dal mondo del server SQL in cui avevamo identificativo univoco. Esiste un equivalente in oracolo? Questa colonna verrà interrogata frequentemente, quindi le prestazioni sono la chiave.

Sto generando il GUID in .Net e lo passerò a Oracle. Per un paio di ragioni non può essere generato da Oracle, quindi non posso usare la sequenza.

È stato utile?

Soluzione

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

Questo blog ha studiato il prestazione relativa.

Altri suggerimenti

Come altri hanno già detto, c'è un impatto sulle prestazioni usando i GUID rispetto alle sequenze numeriche. Detto questo, esiste una funzione denominata " SYS_GUID () " disponibile da Oracle 8i che fornisce l'equivalente non elaborato:

SQL> SELECT SYS_GUID() FROM DUAL;

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

È possibile creare una funzione per restituire un GUID formattato:

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

Restituendo così una stringa intercambiabile:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

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

Va ??notato che alcune piattaforme Oracle restituiscono valori simili ma ancora unici dei GUID come notato di Steven Feuerstein.

Se capisco correttamente la domanda, vuoi generare un ID univoco quando inserisci una riga nel db.
Per fare ciò puoi usare una sequenza . link qui
Dopo aver creato la sequenza, puoi usarla in questo modo:

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

RAW (16) è apparentemente l'equivalente preferito per il tipo MS SQL uniqueidentifier.

I GUID non sono così usati in Oracle come in MSSQL, tendiamo ad avere un campo NUMBER (non null & amp; chiave primaria), una sequenza e un trigger su insert per popolarlo (per ogni tabella).

Non esiste un identificativo univoco in Oracle.

Puoi implementarlo tu stesso usando RAW (tipo di dolore) o CHAR. Le prestazioni sulle query che si uniranno a un campo CHAR subiranno (forse fino al 40%) rispetto all'utilizzo di un numero intero.

Se stai eseguendo database distribuiti / replicati, ne vale la pena l'hit performance. Altrimenti, usa solo un numero intero.

La pratica generale che utilizza Oracle è creare una chiave artificiale. Questa è una colonna definita come un numero. È popolato tramite una sequenza. È indicizzato / vincolato tramite una definizione di chiave primaria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top