web-dev-qa-db-fra.com

Quelle est la double table dans Oracle?

J'ai entendu des gens se référer à cette table et je ne savais pas trop de quoi il s'agissait.

216
Brian G

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;

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

216
Sean McMains

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.

77
mfx

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.

66
Ivan Bosnic

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".

20
Jorge Ferreira

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 calcul
  • Select sysdate from dual imprime la date actuelle du serveur.
10
Martin08

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
4
AB01

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.

4
Kevan Emmott

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

3

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

2
Sakin

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;
1
steevc

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).

0
Vishwa G

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.

0
Gonzalo Merayo

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

0
Newton fan 01

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;  
0
Manjunatha B