62 votes

Sélectionner sans la clause FROM dans Oracle

En Serveur SQL Il est possible d'exécuter un SELECT, sans référence à une table ; quelque chose comme :

Select 1.2 +3, 'my dummy string'

En tant que Oracle ne permet pas un SELECT sans FROM, j'utilise la table double pour ce type d'opération ; quelque chose comme :

Select 1,2+3, 'my dummy string' FROM DUAL

Y a-t-il une meilleure façon d'effectuer ce type de requête ? Est-ce une bonne pratique d'utiliser la table double ?

97voto

Quassnoi Points 191041

Non, en Oracle il n'y a pas de SELECT sans FROM .

L'utilisation de la dual est une bonne pratique.

dual est une table en mémoire. Si vous ne sélectionnez pas DUMMY à partir de celui-ci, il utilise un chemin d'accès spécial ( FAST DUAL ) qui ne nécessite pas de I/O .

Il était une fois, dual comportait deux enregistrements (d'où son nom) et était destiné à servir de jeu d'enregistrements fictif pour dupliquer les enregistrements joints.

Il ne contient plus qu'un seul enregistrement, mais il permet toujours de générer un nombre arbitraire de lignes :

SELECT  level
FROM    dual
CONNECT BY
        level <= 100

MySQL soutient également dual (ainsi que la syntaxe fromless).

2 votes

Je ne connaissais pas l'histoire de la dualité. Assurez-vous simplement que le tableau double ne contient qu'une seule ligne. J'ai vu des tableaux doubles contenant toutes sortes de choses. C'est la garantie d'une longue et amusante chasse aux bugs.

0 votes

Un peu comme lorsque /dev/null est remplacé par un fichier normal ?

0 votes

@Paul Tomblin Le système double utilise un chemin d'accès différent selon que vous sélectionnez ou non dummy de ne pas le faire.

11voto

Vincent Malgrat Points 42899

D

I

SELECT sysdate INTO l_date FROM dual;
SELECT CASE WHEN i = j THEN 0 ELSE 1 END INTO l_foo FROM dual;
...

y

l_date := sysdate;
l_foo  := CASE WHEN i = j THEN 0 ELSE 1 END;
...

0 votes

+

4voto

dcp Points 26928

il est recommandé d'utiliser la table double

Oui, la double table est généralement utilisée dans ce but précis. C'est assez standard dans Oracle lorsque vous n'avez pas de table à sélectionner.

1 votes

T

4voto

sleske Points 29978

Oui, la double table est la manière habituelle de le faire dans Oracle. En fait, il a été introduit juste pour cela.

L'avantage principal de DUAL est que l'optimiseur d'Oracle sait qu'il est spécial, donc les requêtes l'utilisant peuvent être plus rapides que si vous utilisiez une table à une seule ligne que vous avez faite vous-même. A part ça, il n'y a rien de spécial à ce sujet.

2voto

tmeisenh Points 598

Je pense que tu dois utiliser le dual. il est utilisé lorsque vous devez exécuter SQL qui n'a pas de nom de table. Je ne peux pas dire que je l'utilise beaucoup plus que dans les scripts SQL pour faire écho à la date à laquelle quelque chose est exécuté ou quelque chose de stupide comme ça.

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