web-dev-qa-db-fra.com

Comment créer une table temporaire dans une base de données Oracle?

J'aimerais créer une table temporaire dans une base de données Oracle

quelque chose comme

Declare table @table (int id)

En serveur SQL

Et puis le peupler avec une instruction select

C'est possible?

Merci

82
GigaPr

Oui, Oracle a des tables temporaires. Voici un lien vers un article AskTom les décrivant et ici est la documentation officielle Oracle CREATE TABLE.

Cependant, sous Oracle, seules les données d'une table temporaire sont temporaires. La table est un objet régulier visible pour les autres sessions. Il est déconseillé de créer et de supprimer fréquemment des tables temporaires dans Oracle.

CREATE GLOBAL TEMPORARY TABLE today_sales(order_id NUMBER)
ON COMMIT PRESERVE ROWS;

Oracle 18c a ajouté des tables temporaires privées, qui sont des objets en mémoire à session unique. Voir la documentation pour plus de détails. Des tables temporaires privées peuvent être créées et supprimées dynamiquement.

CREATE PRIVATE TEMPORARY TABLE ora$ptt_today_sales AS
SELECT * FROM orders WHERE order_date = SYSDATE;

Les tables temporaires peuvent être utiles, mais elles font souvent l’objet d’abus dans Oracle. Ils peuvent souvent être évités en combinant plusieurs étapes dans une seule instruction SQL à l'aide de vues en ligne.

122
hamishmcn

Juste un conseil .. Les tables temporaires dans Oracle sont différentes de SQL Server. Vous le créez UNE FOIS et seulement UNE FOIS, pas à chaque session. Les lignes que vous y insérez ne sont visibles que par votre session et sont automatiquement supprimées (c.-à-d., TRUNCATE, et non DROP) lorsque vous terminez votre session (ou la fin de la transaction, selon le type "ON"). COMMIT "que vous utilisez).

69
Matthew Watson
CREATE GLOBAL TEMPORARY TABLE Table_name
    (startdate DATE,
     enddate DATE,
     class CHAR(20))
  ON COMMIT DELETE ROWS;
33