Sybase Développeur Demande: Comment faire Pour Créer une Table Temporaire dans Oracle?
Je suis familier avec Sybase /SQL server, où je peux créer un temp. tableau comme ceci:
SELECT *
INTO #temp
FROM tab1 ,
tab2
WHERE tab1.key = tab2.fkey
SELECT *
FROM #temp
WHERE field1 = 'value'
#temp n'existe que pour la durée de cette session, et ne peut être vu que par moi.
Je voudrais faire quelque chose de similaire dans Oracle, mais je suis en train de lire à propos de "tables temporaires globales", qui ne ressemblent pas à la même chose.
Comment puis-je faire la même chose dans Oracle comme je le fais dans Sybase?
Merci 🙂
OriginalL'auteur AJ. | 2008-10-21
Vous devez vous connecter pour publier un commentaire.
Votre première démarche doit être d'en faire une seule requête:
Pour les situations très complexes ou lorsque temp# est très grand, essayez une sous-requête d'affacturage clause, éventuellement avec le matérialiser astuce:
Si ce n'est pas utile, aller à la Table Temporaire Globale de la méthode.
OriginalL'auteur David Aldridge
Une table temporaire globale n'est pas la même, la définition reste après la fin de la session, également la table (mais pas les données) est visible à toutes les sessions.
Si vous êtes d'écrire des procédures stockées, avez-vous regardé dans les curseurs? C'est un peu plus compliqué, mais très efficace et propre façon de travailler avec une entreprise de l'ensemble de données.
Réponse sommet. Merci pour les curseurs de la suggestion. Je pense que je vais devoir trouver un moyen de vivre avec un mondial de la table temporaire. Vraisemblablement, il a ses avantages. Je vais avoir à travailler sur ce qu'ils sont! 😉
Eh bien, vous pourriez obtenir un léger avantage en matière de performances, de ne pas la création de la table à chaque fois 🙂 L'autre chose qui s'est produit pour moi, pour ton premier exemple, si vous souhaitez simplement une colonne de chacune des deux tables, vous pouvez envisager d'un point de vue à la place.
OriginalL'auteur Colin Pickard
Oracle ne fournit pas un analogue direct de cette installation. Une table temporaire globale est similaire, mais il doit être créé à l'avance et peuvent être difficiles à modifier, en bas de la ligne en raison de problèmes de verrouillage.
À la plupart des besoins de cette nature peuvent être rencontrés avec les curseurs ou l'un des différents pl/sql types de collections (tableaux imbriqués, varrays, tableaux associatifs), mais aucun de ceux qui peuvent être utilisés comme s'ils étaient une table. Qui est, vous ne pouvez pas SÉLECTIONNER d'eux.
OriginalL'auteur Noah Yetter
Je crois global temporaire tableaux sont les mêmes. Ils vous donneront accès privé à une table temporaire qui meurt lors de la fin de la session:
Après la lecture de la question un peu plus de temps je crois que la principale différence, et peut-être que votre problème est que les tables temporaires persistent entre les sessions. Donc, l'équivalent exact n'est pas possible que vous ne l'imaginez dans Oracle, il pourrait être quelque chose comme:
La table qui va vivre jusqu'à ce qu'il est abandonné même par le biais de sessions bien que les données ne fonctionne pas. Au lieu de cela, vous devrez créer la table temporaire à l'avance.
en fait lors de la validation de PRÉSERVER les LIGNES serait plus proche de ce qu'il veut depuis son sybase tableau existe pour le reste de la session. Lors de la validation SUPPRIMER des LIGNES sera tronquée à la fin de la transaction (similaire à faire un rollback)
OriginalL'auteur carson
La table temporaire modèle est quelque peu différente dans Oracle, et d'autres centres à travers le "CRÉER une TABLE TEMPORAIRE GLOBALE..". Temp définitions de table sont toujours globales, mais les données sont toujours privés de la session, et si les données persiste au-delà d'une validation dépend de la qualification "lors de la validation de préserver les lignes" ou "à commettre supprimer des lignes" est spécifié.
J'ai quelques scripts Perl et un billet de blog qui explore le comportement spécifique ou de l'Oracle de tables temporaires sur mon blog.
OriginalL'auteur tardate
Oui, carson a droit. Les tables temporaires globales ne sont visibles qu'à la session qui les crée, et disparaissent à la première instruction commit ou rollback, ou à la fin de la session. Vous pouvez définir que lorsque vous créez la gtt.
OriginalL'auteur Jim Hudson