Table DOUBLE - DUAL table

La DUAL table est une rangée particulière, une colonne de la table présente par défaut dans Oracle et d' autres bases de données d' installations. Dans Oracle, la table a une seule colonne VARCHAR2(1) appelée DUMMY qui a une valeur de 'X'. Il convient à une utilisation dans la sélection d'une pseudo-colonne telle que SYSDATE ou USER.

Exemple d'utilisation

La syntaxe SQL d'Oracle nécessite la clause FROM mais certaines requêtes ne nécessitent aucune table - DUAL peut être utilisé dans ces cas.

SELECT 1+1
FROM dual;

SELECT 1 
FROM dual;

SELECT USER 
FROM dual;

SELECT SYSDATE 
FROM dual;

SELECT * 
FROM dual;

Histoire

Charles Weiss explique pourquoi il a créé DUAL :

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 puissiez faire une jointure à 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'extension DATA et pour l'extension INDEX. Le nom, DUAL, semblait approprié pour le processus de création d'une paire de lignes à partir d'une seule.

Optimisation

À compter de la version 10g version 1, Oracle n'effectue plus d'E/S physiques ou logiques sur la table DUAL, bien que la table existe toujours.

DUAL est facilement disponible pour tous les utilisateurs autorisés dans une base de données SQL.

Dans d'autres systèmes de bases de données

Plusieurs autres bases de données (y compris Microsoft SQL Server, MySQL, PostgreSQL, SQLite et Teradata) permettent d'omettre complètement la clause FROM si aucune table n'est nécessaire. Cela évite le besoin d'une table factice.

  • Firebird a une table système à une ligne RDB$DATABASE qui est utilisée de la même manière que DUAL d'Oracle, bien qu'elle ait également une signification propre.
  • IBM DB2 a une vue qui résout DUAL lors de l'utilisation de la compatibilité Oracle. Il a également une table appelée sysibm.sysdummy1 qui a des propriétés similaires à celle d'Oracle DUAL.
  • Informix : Informix version 11.50 et ultérieures a une table nommée avec la même fonctionnalité mais un nom plus détaillé. Vous pouvez utiliser pour créer un nom dans la base de données actuelle avec la même fonctionnalité.sysmaster:"informix".sysdualCREATE PUBLIC SYNONYM dual FOR sysmaster:"informix".sysdualdual
  • Microsoft Access : une table nommée DUAL peut être créée et la contrainte de ligne unique appliquée via ADO ( requête UNION sans table dans MS Access )
  • Microsoft SQL Server : SQL Server ne nécessite pas de table factice. Les requêtes telles que « select 1 + 1 » peuvent être exécutées sans clause/nom de table « from ».
  • MySQL permet à DUAL d'être spécifié en tant que table dans les requêtes qui n'ont besoin de données d'aucune table. Il convient à une utilisation dans la sélection d'une fonction de résultat telle que SYSDATE() ou USER() , bien qu'il ne soit pas essentiel.
  • PostgreSQL : Une vue DUAL peut être ajoutée pour faciliter le portage depuis Oracle.
  • Snowflake : DUAL est pris en charge, mais pas explicitement documenté. Il apparaît dans l'exemple SQL pour d'autres opérations dans la documentation.
  • SQLite : Une VUE nommée "dual" qui fonctionne de la même manière que la table Oracle "dual" peut être créée comme suit :CREATE VIEW dual AS SELECT 'x' AS dummy;
  • SAP HANA a une table appelée DUMMY qui fonctionne de la même manière que la table "double" Oracle.
  • La base de données Teradata ne nécessite pas de table factice. Les requêtes telles que « select 1 + 1 » peuvent être exécutées sans clause/nom de table « from ».

Remarques