2008-10-30 10 views
1

Dans MS SQL 2005 ou T-SQL, vous pouvez faire quelque chose comme:Sélectionnez à partir d'une requête imbriquée dans Oracle 9i

SELECT T.NAME, T.DATE 
    FROM (SELECT * FROM MyTable WHERE ....) AS T 

je ne ai pas essayer SQL similaire sur Oracle 9i DB. Dans MS SQL, le SQL imbriqué est traité comme une vue temporaire/dynamique créée à la volée et détruite par la suite. Comment puis-je faire la même chose dans Oracle? Je ne veux vraiment pas créer une vue pour le faire.

Répondre

6

Je crois qu'il s'étouffe sur le "as".

SELECT T.NAME, T.DATE 
    FROM (SELECT * FROM MyTable WHERE ....) T 

devrait fonctionner.

3

La seule chose que vous devez changer est de supprimer le mot-clé "AS". Oracle ne l'utilise que pour les alias de colonnes (par exemple, SELECT dummy AS nom_de_du_DIS dual), même si vous n'en avez pas besoin.

0

Si vous avez vraiment besoin de créer un résultat temporaire, physique mis alors vous faire avec une clause d'affacturage de sous-requête:

with t as 
(SELECT /*+ materliaze */ 
     * 
FROM MyTable 
WHERE ....) 
SELECT T.NAME, T.DATE 
FROM T 
/

Il est généralement pas utile sauf dans des situations particulières dans lesquelles une estimation précise de l'optimiseur d'un l'ensemble de résultats intermédiaires dans une requête est critique pour un plan d'exécution efficace, auquel cas l'échantillonnage dynamique peut être utilisé pour voir la taille de l'ensemble de résultats, ou lorsqu'un ensemble de résultats calculé est utilisé plusieurs fois dans le reste de la requête.

Vous devriez pouvoir supprimer l'AS, et Oracle fusionnera logiquement la vue en ligne dans la requête principale si cela est possible en toute sécurité.

Questions connexes