Qu'est-ce que la double table dans Oracle?

Réponses:

230

C'est une sorte de tableau factice avec un seul enregistrement utilisé pour sélectionner lorsque vous n'êtes pas réellement intéressé par les données, mais que vous souhaitez plutôt les résultats d'une fonction système dans une instruction select:

par exemple select sysdate from dual;

Voir http://www.adp-gmbh.ch/ora/misc/dual.html

Sean McMains
la source
79

Il s'agit d'une table factice contenant un élément. C'est utile car Oracle n'autorise pas les instructions comme

 SELECT 3+4

Vous pouvez contourner cette restriction en écrivant

 SELECT 3+4 FROM DUAL

au lieu.

mfx
la source
70

De Wikipédia

L'histoire

La table DUAL a été créée par Chuck Weiss de la société Oracle pour fournir une table pour rejoindre les vues internes:

J'ai créé la table DUAL en tant qu'objet sous-jacent dans le dictionnaire de données Oracle. Il n'a jamais été conçu pour être vu lui-même, mais plutôt utilisé à l'intérieur d'une vue qui devait être interrogée. L'idée était que vous pouviez faire un JOIN à la table DUAL et créer deux lignes dans le résultat pour chaque ligne de votre table. Ensuite, en utilisant GROUP BY, la jointure résultante peut être résumée pour afficher la quantité de stockage pour l'étendue DATA et pour les extensions INDEX. Le nom, DUAL, semblait approprié pour le processus de création d'une paire de lignes à partir d'une seule. 1

Cela peut ne pas être évident à partir de ce qui précède, mais la table DUAL d'origine contenait deux lignes (d'où son nom). De nos jours, il n'a qu'une seule ligne.

Optimisation

DUAL était à l'origine une table et le moteur de base de données effectuait les E / S disque sur la table lors de la sélection dans DUAL. Cette E / S de disque était généralement une E / S logique (n'impliquant pas d'accès au disque physique) car les blocs de disque étaient généralement déjà mis en cache en mémoire. Cela a entraîné une grande quantité d'E / S logiques par rapport à la table DUAL.

Les versions ultérieures de la base de données Oracle ont été optimisées et la base de données n'effectue plus d'E / S physiques ou logiques sur la table DUAL même si la table DUAL existe toujours.

Ivan Bosnic
la source
21

Je pense que cet article wikipedia peut aider à clarifier.

http://en.wikipedia.org/wiki/DUAL_table

La table DUAL est une table spéciale à une ligne présente par défaut dans toutes les installations de base de données Oracle. Il peut être utilisé pour sélectionner une pseudocolonne telle que SYSDATE ou USER. La table a une seule colonne VARCHAR2 (1) appelée DUMMY qui a une valeur de "X"

Jorge Ferreira
la source
10

C'est la table spéciale d'Oracle. Je l'utilise souvent pour des calculs ou pour vérifier des variables système. Par exemple:

  • Select 2*4 from dual imprime le résultat du calcul
  • Select sysdate from dual imprime la date actuelle du serveur.
Martin08
la source
4

Une sorte de pseudo-table sur laquelle vous pouvez exécuter des commandes et obtenir des résultats, tels que sysdate. Vous aide également à vérifier si Oracle est en place et à vérifier la syntaxe SQL, etc.


la source
4

Une table d'utilitaires dans Oracle avec seulement 1 ligne et 1 colonne. Il est utilisé pour effectuer un certain nombre d'opérations arithmétiques et peut être utilisé généralement lorsque l'on a besoin de générer une sortie connue.

SELECT * FROM dual;

donnera une seule ligne, avec une seule colonne nommée "DUMMY" et une valeur de "X" comme indiqué ici:

DUMMY
----- 
X
AB01
la source
2

La table DUAL est une table spéciale à une ligne présente par défaut dans toutes les installations de base de données Oracle. Il peut être utilisé pour sélectionner une pseudocolonne telle que SYSDATE ou USER

La table a une seule colonne VARCHAR2 (1) appelée DUMMY qui a une valeur de "X"

Vous pouvez tout lire à ce sujet dans http://en.wikipedia.org/wiki/DUAL_table

Sakin
la source
1

DUAL est nécessaire dans le développement PL / SQL pour utiliser des fonctions qui ne sont disponibles qu'en SQL

par exemple

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
steevc
la source
0

C'est un objet à mettre dans le retour de cette ligne vide 1. Par exemple: sélectionnez 1 parmi dual; renvoie 1

sélectionnez 21 + 44 parmi dual; renvoie 65

sélectionnez [séquence] .nextval parmi dual; renvoie la valeur suivante de la séquence.


la source
0

DUAL, nous avons principalement utilisé pour obtenir le numéro suivant des séquences.

Syntaxe: SELECT 'nom_séquence' .NEXTVAL DUAL

Cela renverra la valeur d'une colonne et d'une colonne (nom de colonne NEXTVAL).

Vishwa G
la source
1
Ce n'est pas nécessaire depuis 11g. Les séquences peuvent être utilisées nativement en PL / SQL.
Jon Heller
0

une autre situation qui nécessite select ... from dual est lorsque nous voulons récupérer le code (définition de données) pour différents objets de base de données (comme TABLE, FUNCTION, TRIGGER, PACKAGE), en utilisant la DBMS_METADATA.GET_DDLfonction intégrée:

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;

Il est vrai que de nos jours, les IDE offrent la possibilité d'afficher le DDL d'une table, mais dans des environnements plus simples comme SQL Plus, cela peut être très pratique.

ÉDITER

une situation plus générale: fondamentalement, lorsque nous devons utiliser une procédure PL / SQL dans une instruction SQL standard, ou lorsque nous voulons appeler une procédure à partir de la ligne de commande:

select my_function(<input_params>) from dual;

les deux recettes sont extraites du livre «Oracle PL / SQL Recipes» de Josh Juneau et Matt Arena

Newton fan 01
la source
0

Le DUAL est une table spéciale à une ligne et une colonne présente par défaut dans toutes les bases de données Oracle. Le propriétaire de DUAL est SYS.

DUAL est une table créée automatiquement par Oracle Database avec les fonctions de données. Il est toujours utilisé pour obtenir les fonctions des systèmes d'exploitation (comme la date, l'heure, l'expression arithmétique, etc.)

SELECT SYSDATE from dual;  
Manjunatha B
la source