|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité(e)
Messages : n/a ![]() |
Bonjour,
Avant j'utilisais le type GUID comme clé primaire d'une table avec MS SQL où un type spécial "uniqueidentifier" existait. Mais je me creuse de la tête pour faire la même chose sous Oracle, donc j'utiliserais le type VARCHAR2(36) ou VARCHAR2(38) (avec les accolades du GUID) comme équivalence. Comment faire alors pour faire ce champ qui se donne une valeur toute seule sans qu'on l'ajoute toujours dans la liste des VALUES lors des insertions, je me propose Code :
ID char (36) DEFAULT SYS_GUID() PRIMARY KEY Et pour un champ de type date + heure, quel est le mieux: DATE ou TIMESTAMP ?? |
00
|
|
|
#2 | |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Citation:
La différence est que TIMESTAMP permet de gérer la partie fractionnaire des secondes et peut prendre en charge le timezone. De plus, il est aussi fortement couplé au type INTERVAL qui permet de gérer des intervalles entre TIMESTAMPs Pour gérer date+heure seulement, DATE est le plus simple
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
|
00
|
|
|
#3 |
|
Invité(e)
Messages : n/a ![]() |
Et pour le GUID en clé primaire ?
|
00
|
|
|
#4 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Pourquoi passer par un guid varchar2(38) ???
Pourquoi pas passer par un simple ID numérique couplé à une séquence ? Entre un ID de type NUMBER et un ID de type VARCHAR2(38), y a pas photo ! C'est vraiment un pré-requis qui t'es imposé d'avoir un GUID ?
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#5 | ||
|
Invité(e)
Messages : n/a ![]() |
Une clé primaire en UUID est très familier surtout pour les utilisateurs de BD Sql Server (qui bénéficient du type natif UNIQUEIDENTIFIER) et Access 2003. Et je voudrais tout simplement faire la même chose avec Oracle.
J'ai même trouvé sur le net une fonction pour créer un GUID (http://www.oracle-base.com/articles/9i/UUID9i.php): Code :
Code :
ID varchar2(38) DEFAULT new_uuid PRIMARY KEY Sous MSSQL, on peut faire [ID] [uniqueidentifier] PRIMARY KEY DEFAULT NEWID() |
||
00
|
|
|
#6 | |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Citation:
Sinon, si tu tiens vraiment à utiliser ta fonction, tu peux l'appeler :
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
|
00
|
|
|
#7 | |
|
Invité(e)
Messages : n/a ![]() |
Comment ?
Il faudrait donc un trigger pour chaque table, quelle poisse !!! Citation:
En effet, un GUID est difficile à indexer mais je dois l'utiliser !!! |
|
00
|
|
|
#8 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
|
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Ca mérite une explication parce que je ne le vois pas (mais pas du tout). C'est quoi un trous dans un GUID ? Et c'est quoi "les contentions" sur les séquences ? Bon sur les tables ça va, mais sur les séquences ?
|
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
une séquence ne garantie pas la perte de valeur, notamment à cause du cache et souffre d'une grosse concurrence d'accès. Les contentions sont du même type que les library cache pin pour les procédures et packages.
|
|
|
00
|
|
|
#11 | |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Citation:
Tu es en train de me dire que gérer une clé primaire via un varchar2(40) n'est pas plus pénalisant en terme de stockage, indexation et recherche qu'un Number ?? Alors la, je fais mon Saint Thomas et je demande à voir !!
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
|
00
|
|
|
#12 | ||||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
vrai
Citation:
Citation:
Citation:
Citation:
|
||||
|
|
00
|
|
|
#13 | |
|
Invité(e)
Messages : n/a ![]() |
Quel débat !!!
Pour nous les novices, on s'y perd un peu mais je me demande: les séquences sont-elles des trucs d'Oracle seulement ou SQL Server l'utilise aussi ? TIMESTAMP ou DATE ? Que choisir à la fin ? La fonction CURRENT_DATE peut-elle retourner un timestamp ? par ex un champ Citation:
|
|
00
|
|
|
#14 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
Si tu n'a pas besoin la partie fractionnaire des secondes, utilise DATE.
PS : Pour retourner le timestamp courant, c'est CURRENT_TIMESTAMP()
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#15 | ||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
Citation:
Code :
Sequences eliminate serialization AND improve the concurrency of your application
|
||
|
|
00
|
|
|
#16 |
|
Invité(e)
Messages : n/a ![]() |
Hey o ! CURRENT_DATE ne retourne que la date mais pas l'heure !
Juste par curiosité, quelle est l'équivalence de TIMESTAMP sous Sql Server puisque DATETIME n'est que date+heure, pas de fraction de secondes. |
00
|
|
|
#17 |
![]() ![]() vincent rogier Inscription : juillet 2007 Messages : 2 355 ![]() |
CURRENT_DATE() renvoi date+heure...
Par contre le format dans lequel c'est affiché dépend de l'outil, des options par défaut, ...
__________________
Vincent Rogier. Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique ! OCILIB (C Driver for Oracle) Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle |
|
00
|
|
|
#18 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Et le pire c’est que le plus souvent les gens ne retient que le fait qu’une séquence pose des problèmes et donc il s’en sorte avec leur propre gestion des séquences stockées dans les tables ce qui pose encore bien plus des problèmes. |
|
|
|
00
|
|
|
#19 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
|
|
|
|
00
|
|
|
#20 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com