Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2007, 15h07   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 32
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 32
Points : 0
Points : 0
Par défaut Temps d'execution de la requête

Bonjour,

Je dois récupérer le temps écoulé depuis le debut de l'heure courante. C'est à dire que :
- si il est 12H45. Je doit renvoyer 45mn soit en heure 0.75
- si il est 12H30. Je doit renvoyer 45mn soit en heure 0.5.
- si il est 12H38......

Ma requete est donc la suivante :
SELECT ((SYSDATE - TO_DATE(TO_CHAR(SYSDATE,'DD/MM/YYY HH24'),'DD/MM/YYY HH24'))*24) FROM DUAL

Cette requete est dans une forme 10g et semble ralentir le systême.
Est-il possible d'optimiser cette requete? Si oui comment ?

Merci
lolafrite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 16h16   #2
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
Bonjour,

Connais-tu la fréquence à laquelle cette requête est exécutée ?
cquilgars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 16h20   #3
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
Si j'ai bien compris, une approximation peut être :
Code :
1
2
3
 
SELECT TO_CHAR(SYSDATE,'MI')/60
FROM dual
Par contre, j'ai un doute que ta requête soit à l'origine de la surcharge système... A moins quelle soit exécutée ttes les 5ms
cquilgars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 16h30   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
ou alors
Code :
1
2
SELECT SYSDATE - TRUNC(SYSDATE, 'HH24')
FROM dual
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2007, 17h07   #5
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
Citation:
Envoyé par McM
ou alors
Code :
1
2
SELECT SYSDATE - TRUNC(SYSDATE, 'HH24')
FROM dual
Si on veut jouer les puristes, cette dernière requête n'est pas consistente car elle fait appel deux fois à SYSDATE qui peut être de valeur différente...
Il faut préférer une requête avec un unique appel à SYSDATE...

Cela ne portera pas, de toute manière, à conséquence ...

A+
cquilgars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 11h24   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Citation:
Envoyé par cquilgars
Code :
1
2
3
 
SELECT TO_CHAR(SYSDATE,'MI')/60
FROM dual
Si on veut jouer les puristes à fond, tu divises un CHAR par un nombre.
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 11h33   #7
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
La conversion est implicite... Mais le TO_NUMBER peut en effet lever le doute pour l'opération ariméthique...

Ma remarque sur SYSDATE était purement un cas d'école... Mais j'en ai fait les frais il y a quelques années de cela sous un Oracle 7 sur un niveau de précision supérieur à la seconde...

Du coup, lorsque une requete nécessite plusieurs sysdate, en fonction du cas, je pense souvent à cette solution pour assurer une consistance fonctionnelle...
Code :
1
2
3
 
SELECT blabla, blala, t.madate bla,bla,bla t.madate (sous-entendu la même), blabla
FROM (SELECT SYSDATE AS madate FROM dual) t, MaTable1, MaTable2
Voila pour mon retour d'expérience

A+
cquilgars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 12h22   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Je comprend le souci sur le sysdate. Le mieux est d'avoir une variable p_sysdate initialisée.

Le cas du select from (select sydate), je suis pas sur à 100%

Explication :
Code :
1
2
3
4
5
SELECT D100 AS premier_dé, D100 AS second_dé
FROM (
	SELECT TRUNC(dbms_random.value(1,100)) AS D100
	FROM dual
	)
Résultat :
PREMIER_DÉ 70
SECOND_DÉ 31

Le sous select est appelé 2 fois !!

Le test avec des SYSTIMESTAMP renvoie la même valeur
Code :
1
2
3
SELECT systimestamp, systimestamp
FROM dual
WHERE EXISTS (SELECT count(*) FROM GrosseTable
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2007, 17h52   #9
Membre du Club
 
Homme
Intégrateur
Inscription : novembre 2004
Messages : 114
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : novembre 2004
Messages : 114
Points : 47
Points : 47
Merci pour cette info...
Ma malheureuse expérience venait d'une version sous Oracle 7 (1997 10 ans déjà ...)

A+
cquilgars est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h18.


 
 
 
 
Partenaires

Hébergement Web