Aide sur les datetime d'Oracle pour une modotte à forte poitrine - SQL/NoSQL - Programmation
Marsh Posté le 10-12-2004 à 15:47:01
au pire, tu peux créer un champ supplémentaire pour y mettre les millisecondes qui débordent et utiliser le doublet comme clé, non?
Marsh Posté le 10-12-2004 à 15:49:20
Bon j'ai pas oracle sous la main mais
si tu transformes ton datetime_millisecondes
en chaine de caractères, tu peux sans doute importer
la première partie datetime_secondes dans un
nouveau champ et la partie restante millisecondes dans un
autre champ ... puis créer un index unique sur
ces 2 champs, non ?
Marsh Posté le 10-12-2004 à 15:56:27
Question subsidiaire: t'as vraiment besoin que l'index soit unique?
PS: et le coup de la fille, on me l'a déjà fait, ca marche pas avec moi
Marsh Posté le 10-12-2004 à 16:32:27
skeye a écrit : au pire, tu peux créer un champ supplémentaire pour y mettre les millisecondes qui débordent et utiliser le doublet comme clé, non? |
vttman2 a écrit : Bon j'ai pas oracle sous la main mais |
c'était ma 1ere idée, je l'ai testé, mais ça me pénalise énormément au niveau vitesse
c'est une table de plus de 10 millions d'enregistrements
gizmo a écrit : Question subsidiaire: t'as vraiment besoin que l'index soit unique? |
non, et ça m'a donné une idée : si je créé une surrogate key rattachée à une séquence, ça me permet d'avoir une clé unique, avec un index non unique. ça te semble viable ?
Marsh Posté le 10-12-2004 à 16:53:07
oui, mais encore faut-il voir si ta clef unique va être utilisée dans une relation, sinon tu n'as même pas besoin d'elle.
Marsh Posté le 10-12-2004 à 17:04:52
sauf erreur de ma part : à partir de la version 9 (peut etre en 8i, à vérifier), le type de données TIMESTAMP permet de répondre à tes besoins.....il fonctionne comme le type DATE mais permet la gestion des fractions de seconde.
Marsh Posté le 10-12-2004 à 19:01:05
oui, enfin, on peut supposer que harko s'y connait suffisament pour avoir cherché si timestamp existait dans sa version d'Oracle avant de poser sa question. non?
Marsh Posté le 10-12-2004 à 19:06:00
HEUH LE COUP DE LA BLONDE A FORTE POITRINE POUR APPATER LE CHALAND? C COPYRIGHT(MOI)
Marsh Posté le 10-12-2004 à 19:17:12
jielbi a écrit : sauf erreur de ma part : à partir de la version 9 (peut etre en 8i, à vérifier), le type de données TIMESTAMP permet de répondre à tes besoins.....il fonctionne comme le type DATE mais permet la gestion des fractions de seconde. |
n'existe pas sur 8i
Marsh Posté le 10-12-2004 à 19:17:44
chrisbk a écrit : HEUH LE COUP DE LA BLONDE A FORTE POITRINE POUR APPATER LE CHALAND? C COPYRIGHT(MOI) |
"les bonnes idées sont faites pour être réutilisées" (c) moi
Marsh Posté le 10-12-2004 à 19:19:54
Harkonnen a écrit : n'existe pas sur 8i |
8i n'est plus supporté, passe à 9i ou 10chépakellelettre et fais pas chier!
Marsh Posté le 10-12-2004 à 19:42:10
10g
Pourquoi pas un NUMBER(17) et stocker la date sous forme aaaammjjhhmissdcm?
Qui a dit barbare?
Marsh Posté le 11-12-2004 à 01:01:12
Harkonnen a écrit : j'ai un souci avec ce $£§!%* d'Oracle : j'importe dans une table des données en provenance d'un autre SGBF, qui gère les datetime à la milliseconde près. Ce champ étant un champ critique, je souhaite lui coller un index et j'obtiens un merveilleux "ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found" |
t'as essayé d'enlever le UNIQUE dans "CREATE UNIQUE INDEX" ?
t'as besoin de la milliseconde ou c'est juste pour que ça soit comme avant ?
Marsh Posté le 11-12-2004 à 01:28:14
ben +1 avec mareek , t'as pas l'air de faire la différence entre index et clé unique
(et qui c'est les guignols qui proposent d'ajouter les millisecondes pour solutionner ce problème? en quoi ça va rendre les timestamps unique? )
Marsh Posté le 11-12-2004 à 13:10:42
the real moins moins a écrit : ben +1 avec mareek , t'as pas l'air de faire la différence entre index et clé unique |
Guignols oui ... mais de l'info
Ecoute mon gros si tas d'un coté base X un
timestamp TX à la milliseconde qui joue le rôle de clé unique
et de l'autre base Y des timestamp limités à la seconde TY, la soluce
la + évidente est de découper TX en TY + TZ
Maintenant à question générale ... réponse générale
Marsh Posté le 11-12-2004 à 13:34:03
euh, je n'avais pas saisi que la base d'origine avait une clé unique sur cette fameuse colonne timestamp.
c'est bien CA ce que je trouve idiot hein
Marsh Posté le 11-12-2004 à 13:53:55
vttman2 a écrit : Guignols oui ... mais de l'info |
Mettre le timestamp en clef c'est stupide
La meilleur chose à faire, c'est de mettre la clef sur un entier lié à une séquence.
Marsh Posté le 11-12-2004 à 14:00:12
mareek a écrit : Mettre le timestamp en clef c'est stupide |
+1 Mais je suis d'accord avec toi Mareek
Mais bon au départ on parlait d'unique index qui marchait pas
car dans la cible on tronquait les millisecondes et donc
ça créait des doublons ...
Marsh Posté le 13-12-2004 à 21:14:50
moi je suis ++ avec ceux qui pense qu'une clé unique sur un tel champ est dangereux (je ne remet par contre pas en compte d'utilité de stocker à la milliseconde près )
Marsh Posté le 13-12-2004 à 21:26:26
et une fois de plus tu nous montre la que tu n'as aucune connaissance du fonctionnement d'un vrai sgbd
Marsh Posté le 13-12-2004 à 21:48:59
chrisbk a écrit : je suis le stagiaire d'harko, je n'ai pas a m'expliquer |
ça c'est constructif comme intervention. ça représente bien le personnage.
tiens, j'ai une chanson pour toi :
Citation : |
Merci beaucoup pour ta belle performance tout de même
En tout cas, une chose me rassure : je n'ai fait que confirmer les dires de deux personnes qui s'y connaissent assez bien, pour une fois mise à part toi, on me foutra peut-être la paix.
Marsh Posté le 13-12-2004 à 21:53:16
ah oui ? et bien moi je te dédie celle la
|
et je te prends au ping pong quand tu veux.
Marsh Posté le 13-12-2004 à 21:56:31
c'est le topic de "ton maître de stage" qu'on pollue là, moi je m'en fous à la base.
Marsh Posté le 13-12-2004 à 21:56:47
bon on va pas épiloguer hein ! je me suis démerdé avec une surrogate key, ça marche très bien et voila !
quand au fait de mettre un index unique, et autres trucs qui vous paraissent bizarres, c'est juste qu'on m'a demandé de transférer des données venant d'une base DB2 vers une base Oracle et de respecter le plus possible la structure (donc de garder les indexes, et tout). maintenant, pourquoi mettre un index sur le timestamp, c'est parce que la base d'origine en possède un et puis voilà. apparemment l'application hote permet de rechercher des infos selon le critère de l'heure, d'ou la présence de l'index.
et pour répondre à moins moins : bien sur que je connais la différence entre index unique et clé unique
Marsh Posté le 13-12-2004 à 21:59:02
pas de souci pour les explications harko celà dit, je reste sceptique quant à la véritable utilité d'un index unique sur ce type de champ, par rapport au risque de violation de clé.
par simple curriosité, c'est quoi comme infos ?
Marsh Posté le 13-12-2004 à 21:59:09
DB2 vers Oracle...
j'ai deja fait une fois, joli bordel a faire , mais ca fonctionnait
Marsh Posté le 13-12-2004 à 22:02:32
Arjuna a écrit : pas de souci pour les explications harko celà dit, je reste sceptique quant à la véritable utilité d'un index unique sur ce type de champ, par rapport au risque de violation de clé. |
ce sont des infos boursières, donc des données très critiques au niveau de la date et de l'heure
"taiiiinnnnn, mon action a perdu 10 depuis 9:02:04.125 "
"dommage, t'aurais du vendre, elle était à 40 à 05:14:06.187 "
Marsh Posté le 13-12-2004 à 22:03:02
uriel a écrit : DB2 vers Oracle... |
tu m'étonnes que c'est un joli bordel
edit: surtout que je bosse sur 8i
Marsh Posté le 13-12-2004 à 22:05:04
ok. ça me semble bizarre qu'on ne risque pas d'avoir de boublon sur ce type d'infos
mais bon, si l'ancien système tournait correctement avec un index unique, pourquoi pas
PS: si tu rédiges un compte rendu de migration, je te conseille d'y relater ce point, histoire que ça te retombe pas dessus si avec la nouvelle base ça merde
Marsh Posté le 13-12-2004 à 22:05:35
bin stocke la sous forme de chaine de caractere en utilisant QueryPerformanceCounter pour avoir une précision de ouf
Marsh Posté le 13-12-2004 à 22:07:04
chrisbk a écrit : bin stocke la sous forme de chaine de caractere en utilisant QueryPerformanceCounter pour avoir une précision de ouf |
ouais m'enfin vive les performances, passer d'un type float (en interne, une date n'est ni plus ni moins qu'un float) à un type non pondéré...
ceci dit, si les dates en question ne contiennent que la partie horraire, why not, puisque de toute façon, la décimale au niveau d'un datetime se fait entre la partie date et la partie horraire.
Marsh Posté le 13-12-2004 à 22:07:25
Arjuna a écrit : ok. ça me semble bizarre qu'on ne risque pas d'avoir de boublon sur ce type d'infos |
déjà fait, parce que j'ai rencontré des merdes encore pires que celle pour laquelle j'ai ouvert ce topic ! j'ai pas envie que tout le monde me tombe dessus parce que leur portefeuille se casse la gueule
Marsh Posté le 13-12-2004 à 22:10:54
Harkonnen a écrit : déjà fait, parce que j'ai rencontré des merdes encore pires que celle pour laquelle j'ai ouvert ce topic ! j'ai pas envie que tout le monde me tombe dessus parce que leur portefeuille se casse la gueule |
c'est sûr qu'en plus, quand il s'agit de portefeuil d'actions, t'auras certainement du mal à dédomager une personne avec les 3 euros qui doivent traîner sur ton compte courrant
Marsh Posté le 13-12-2004 à 22:24:44
Harkonnen a écrit : bon on va pas épiloguer hein ! je me suis démerdé avec une surrogate key, ça marche très bien et voila ! |
euh tu le fais expres?
index != clé unique.
tu dis que y'avait un index et tu parles d'en faire une clé unique, y'a de quoi se poser des questions non?
Marsh Posté le 13-12-2004 à 22:25:37
ca me fait peur oracle...si j'arrive à faire mon stage où je veux, je risque d'avoir à migrer une base SQL server vers de l'Oracle (du 9i ou + j'espère) ...et sortir de l'asp vers du JSP...
ca va etre fun et bigarré...
Marsh Posté le 10-12-2004 à 15:34:19
j'ai un souci avec ce $£§!%* d'Oracle : j'importe dans une table des données en provenance d'un autre SGBF, qui gère les datetime à la milliseconde près. Ce champ étant un champ critique, je souhaite lui coller un index et j'obtiens un merveilleux "ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found"
diantre me dis-je ! des clés dupliquées ! et là, je me souviens que les datetime d'Oracle vont jusqu'à la seconde, me voila dans la merde !
qwechtieunne :
- comment pourrais-je simuler un datetime à la milliseconde ?
- comment indexer ce truc ?