Je souhaite créer une table temporaire dans une base de données Oracle
quelque chose comme
Declare table @table (int id)
Dans le serveur SQL
Et puis remplissez-le avec une instruction de sélection
C'est possible?
Merci
Réponses:
Oui, Oracle a des tables temporaires. Voici un lien vers un article AskTom les décrivant et voici la documentation officielle d'Oracle CREATE TABLE.
Cependant, dans Oracle, seules les données d'une table temporaire sont temporaires. La table est un objet régulier visible par 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. Consultez la documentation pour plus de détails. Les 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 sont couramment utilisées de manière abusive dans Oracle. Ils peuvent souvent être évités en combinant plusieurs étapes en une seule instruction SQL à l'aide de vues en ligne.
CREATE TABLE AS SELECT
: sélectionnez parmi les tables distantes avec des colonnes LOB, car vous ne pouvez pas directement à SELECT
partir d'elles. J'écris une procédure pour copier des enregistrements à partir d'une base de données distante, et c'était ma solution: amener les enregistrements dans un GTT, puis les copier dans la table "réelle".
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'est-à-dire TRUNCATE
non DROP
) lorsque vous terminez votre session (ou la fin de la transaction, selon la clause "ON COMMIT" que vous utilisez).
DELETED
, pas DROP
ped.
CREATE GLOBAL TEMPORARY TABLE Table_name
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS
signifie qu'ils seront supprimés plus tôt, si vous vous engagez de manière incrémentielle au cours d'une session.
CREATE TABLE table_temp_list_objects AS
SELECT o.owner, o.object_name FROM sys.all_objects o WHERE o.object_type = 'TABLE';