Question

Je viens du monde du serveur SQL où nous avions un identifiant unique. Y a-t-il un équivalent en oracle? Cette colonne sera fréquemment interrogée, la performance est donc la clé.

Je génère le GUID en .Net et je le passe à Oracle. Pour plusieurs raisons, il ne peut pas être généré par Oracle, je ne peux donc pas utiliser de séquence.

Était-ce utile?

La solution

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

Ce blog a étudié le performances relatives.

Autres conseils

Comme d'autres l'ont déjà indiqué, l'utilisation de GUID par rapport aux séquences numériques a un impact négatif sur les performances. Cela dit, il existe une fonction nommée SYS_GUID () " disponible depuis Oracle 8i qui fournit l’équivalent brut:

SQL> SELECT SYS_GUID() FROM DUAL;

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

Une fonction pourrait être créée pour renvoyer un GUID formaté:

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

Retourne ainsi une chaîne interchangeable:

SQL> SELECT GET_FORMATTED_GUID() FROM DUAL ;

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

Il convient de noter que certaines plates-formes Oracle renvoient des valeurs de GUID identiques mais toujours uniques. comme indiqué par Steven Feuerstein.

Si je comprends bien la question, vous souhaitez générer un identifiant unique lorsque vous insérez une ligne dans la base de données.
Vous pouvez utiliser une séquence pour le faire. le lien ici . Une fois que vous avez créé votre séquence, vous pouvez l’utiliser comme ceci:

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

RAW (16) est apparemment l’équivalent préféré du type MS SQL uniqueidentifier.

Les GUID ne sont pas aussi utilisés dans Oracle que dans MSSQL. Nous avons tendance à avoir un champ NUMBER (et non une clé primaire), une séquence et un déclencheur à l'insertion pour le remplir (pour chaque table).

Il n'y a pas d'identificateur unique dans Oracle.

Vous pouvez en implémenter vous-même en utilisant RAW (une sorte de douleur) ou CHAR. Les performances sur les requêtes qui se joignent à un champ CHAR en souffriront (peut-être jusqu'à 40%) par rapport à l'utilisation d'un entier.

Si vous utilisez des bases de données distribuées / répliquées, l'impact sur les performances en vaut la peine. Sinon, utilisez simplement un entier.

La pratique courante d’Oracle consiste à créer une clé artificielle. Ceci est une colonne définie comme un nombre. Il est rempli via une séquence. Il est indexé / contraint via une définition de clé primaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top