97 votes

Comment générer un GUID dans Oracle ?

Est-il possible de générer automatiquement un GUID dans une instruction d'insertion ?

En outre, quel type de champ dois-je utiliser pour stocker ce GUID ?

146voto

Tony Andrews Points 67363

Vous pouvez utiliser la fonction SYS_GUID() pour générer un GUID dans votre instruction d'insertion :

insert into mytable (guid_col, data) values (sys_guid(), 'xxx');

Le type de données préféré pour stocker les GUID est RAW(16).

Comme le répond Gopinath :

 select sys_guid() from dual
 union all
 select sys_guid() from dual
 union all 
 select sys_guid() from dual

Vous obtenez

88FDC68C75DDF955E040449808B55601
88FDC68C75DEF955E040449808B55601
88FDC68C75DFF955E040449808B55601

Comme le dit Tony Andrews, ne diffère que d'un seul caractère

88FDC68C75D D F955E040449808B55601
88FDC68C75D E F955E040449808B55601
88FDC68C75D F F955E040449808B55601

Peut-être utile : http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

28voto

TTT Points 1894

Vous pouvez également inclure le guide dans l'instruction de création de la table par défaut, par exemple :

create table t_sysguid
( id     raw(16) default sys_guid() primary key
, filler varchar2(1000)
)
/

Voir ici : http://rwijk.blogspot.com/2009/12/sysguid.html

8voto

Kenneth Baltrinic Points 910

Il n'est pas clair ce que vous voulez dire par auto-générer un guide dans une déclaration d'insertion, mais à mon avis, je pense que vous essayez de faire quelque chose comme ce qui suit :

INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Adams');
INSERT INTO MY_TAB (ID, NAME) VALUES (SYS_GUID(), 'Baker');

Dans ce cas, je pense que la colonne ID doit être déclarée comme RAW(16) ;

Je fais cela à l'improviste. Je n'ai pas d'instance Oracle à portée de main pour faire des tests, mais je pense que c'est ce que vous voulez.

2voto

Gopinath Kotla Points 1

Vous pouvez exécuter la requête suivante

 select sys_guid() from dual
 union all
 select sys_guid() from dual
 union all 
 select sys_guid() from dual

1voto

Bharat Points 4597

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X