J'ai entendu des gens se référer à cette table et je ne savais pas trop de quoi il s'agissait.
C'est une sorte de table factice avec un seul enregistrement utilisé pour sélectionner lorsque les données ne vous intéressent pas, mais que vous voulez plutôt les résultats d'une fonction système dans une instruction select:
par exemple. select sysdate from dual;
C'est une table factice avec un élément. C'est utile car Oracle n'autorise pas les instructions telles que
SELECT 3+4
Vous pouvez contourner cette restriction en écrivant
SELECT 3+4 FROM DUAL
au lieu.
De Wikipedia
Historique
La table DUAL a été créée par Chuck Weiss de la société Oracle afin de fournir une table permettant de joindre des 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, mais plutôt utilisé dans une vue censée être interrogée. L'idée était de pouvoir associer JOIN à la table DUAL et de 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 l'étendue (s) INDEX. Le nom, DUAL, semblait propice au processus de création d'une paire de lignes à partir d'une seule. 1
Ce n’est peut-être pas évident, mais la table DUAL originale comportait deux lignes (d’où son nom). De nos jours, il n'a qu'une rangée.
Optimisation
DUAL était à l'origine une table et le moteur de base de données exécutait le disque IO sur la table lors de la sélection dans DUAL. Ce disque IO était généralement logique IO (n'impliquant pas d'accès au disque physique), car les blocs de disque étaient généralement déjà mis en cache dans la mémoire. Cela a entraîné une grande quantité de IO logiques contre 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 IO physique ou logique sur la table DUAL, même si la table DUAL existe toujours.
Je pense que cet article de Wikipédia 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. Elle convient à la sélection d’une pseudo-colonne, telle que SYSDATE ou USER. La table comporte une seule colonne VARCHAR2 (1) appelée DUMMY, qui a la valeur "X".
C'est la table spéciale dans Oracle. Je l'utilise souvent pour des calculs ou la vérification de variables système. Par exemple:
Select 2*4 from dual
imprime le résultat du calculSelect sysdate from dual
imprime la date actuelle du serveur.Une table utilitaire 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 lorsqu'il est nécessaire 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
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 opérationnel et à vérifier la syntaxe SQL, etc.
Plus de faits sur le DUAL ....
http://asktom.Oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:1562813956388
Expériences palpitantes faites ici, et des explications plus palpitantes par Tom
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 convient pour sélectionner une pseudo-colonne telle que SYSDATE ou USER.
La table a une seule colonne VARCHAR2 (1) appelée DUMMY qui a la valeur "X"
Vous pouvez tout lire à ce sujet dans http://en.wikipedia.org/wiki/DUAL_table
DUAL est nécessaire dans le développement PL/SQL pour utiliser des fonctions uniquement disponibles en SQL.
par exemple.
DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;
DUAL nous avons principalement utilisé pour obtenir le prochain numéro des séquences.
Syntaxe: SELECT 'nom_ordre' .NEXTVAL FROM DUAL
Cela renverra la valeur d'une colonne d'une ligne (nom de colonne NEXTVAL).
C'est un objet à mettre dans la 1 ligne vide de ce retour. Par exemple: sélectionnez 1 parmi dual; renvoie 1
sélectionnez 21 + 44 parmi dual; renvoie 65
sélectionnez [séquence] .nextval à partir de dual; renvoie la valeur suivante de la séquence.
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 (tels que TABLE, FUNCTION, TRIGGER, PACKAGE), à l'aide de la fonction DBMS_METADATA.GET_DDL
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 qu’aujourd’hui, 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.
EDIT
une situation plus générale: lorsque vous devez utiliser une procédure PL/SQL dans une instruction SQL standard ou que vous souhaitez 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
La table DUAL est une table spéciale à une ligne, 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 du système d'exploitation (telles que la date, l'heure, l'expression arithmétique, etc.).
SELECT SYSDATE from dual;