Pregunta

Vengo del mundo del servidor SQL donde teníamos identificador único. ¿Hay un equivalente en el oráculo? Esta columna se consultará con frecuencia, por lo que el rendimiento es la clave.

Estoy generando el GUID en .Net y lo pasaré a Oracle. Por un par de razones no puede ser generado por Oracle, por lo que no puedo usar la secuencia.

¿Fue útil?

Solución

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

Este blog estudió el rendimiento relativo.

Otros consejos

Como han dicho otros, hay un impacto en el rendimiento al usar GUID en comparación con las secuencias numéricas. Dicho esto, existe una función llamada " SYS_GUID () " disponible desde Oracle 8i que proporciona el equivalente en bruto:

SQL> SELECT SYS_GUID() FROM DUAL;

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

Se podría crear una función para devolver un GUID con formato:

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

Devolviendo así una cadena intercambiable:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

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

Se debe tener en cuenta que algunas plataformas de Oracle devuelven valores similares pero aún únicos de GUID como se indica por Steven Feuerstein.

Si entiendo la pregunta correctamente, desea generar una ID única cuando inserta una fila en la base de datos.
Podría usar una secuencia para hacer esto. enlace aquí
Una vez que haya creado su secuencia, puede usarla así:

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

RAW (16) es aparentemente el equivalente preferido para el tipo de identificador único MS SQL.

Los GUID no son tan utilizados en Oracle como en MSSQL, tendemos a tener un campo NÚMERO (no nulo y clave principal), una secuencia y un activador en la inserción para rellenarlo (para cada tabla).

No hay un identificador único en Oracle.

Puedes implementar uno tú mismo usando RAW (tipo de dolor) o CHAR. El rendimiento en las consultas que ÚNASE en un campo CHAR sufrirá (tal vez hasta un 40%) en comparación con el uso de un entero.

Si estás haciendo bases de datos distribuidas / replicadas, el impacto de rendimiento vale la pena. De lo contrario, solo usa un entero.

La práctica general de usar Oracle es crear una clave artificial. Esta es una columna definida como un número. Se rellena a través de una secuencia. Se indexa / restringe a través de una definición de clave principal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top