Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Existe um limite de aninhamento para subconsultas correlacionadas em algumas versões do Oracle?


As versões recentes do Oracle não têm um limite, mas a maioria das versões mais antigas do Oracle têm um limite de aninhamento de 1 nível profundo.

Isso funciona em todas as versões:
SELECT  (
        SELECT  *
        FROM    dual dn
        WHERE   dn.dummy = do.dummy
        )
FROM    dual do

Esta consulta funciona em 12c e 18c, mas não funciona em 10g e 11g. (No entanto, existe pelo menos uma versão do 10g que permitia essa consulta. E há um patch para habilitar esse comportamento no 11g.)
SELECT  (
        SELECT  *
        FROM    (
                SELECT  *
                FROM    dual dn
                WHERE   dn.dummy = do.dummy
                )
        WHERE   rownum = 1
        )
FROM    dual do

Se necessário, você pode contornar essa limitação com funções de janela (que você pode usar no SQL Server também:)
SELECT  *
FROM    (
        SELECT  m.material_id, ROW_NUMBER() OVER (PARTITION BY content_id ORDER BY resolution DESC) AS rn
        FROM    mat m
        WHERE   m.material_id IN
                (
                SELECT  con.content_id
                FROM    con_groups
                JOIN    con
                ON      con.content_id = con_groups.content_id
                WHERE   con_groups.content_group_id = 10
                )
        )
WHERE   rn = 1