Question

Pourquoi ça ne marche pas?

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual WHERE 1=1) b
     ON (1=1);

Je reçois "ORA-00900: instruction SQL non valide". Est-il possible d'utiliser la clause WHERE à l'intérieur du sous-requête?

Edit: Version 9.2

SELECT *
FROM v$version

Oracle9i Enterprise Edition de presse 9.2.0.8.0 - Production 64bit

Les suivants se exécute très bien:

SELECT a.*
FROM dual a
     JOIN (SELECT * FROM dual /*WHERE 1=1*/) b
     ON (1=1)
Était-ce utile?

La solution

Il fonctionne pour moi sur 9.2 (version 32 bits est la seule différence):

SQL> SELECT a.*
  2  FROM dual a
  3       JOIN (SELECT * FROM dual WHERE 1=1) b
  4       ON (1=1);

D
-
X

SQL> quit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
With the OLAP and Oracle Data Mining options
JServer Release 9.2.0.8.0 - Production

Autres conseils

Quelle version utilisez-vous?

L'exacte même SQL fonctionne bien pour moi (Oracle Database 10g Express Edition de presse 10.2.0.1.0).

Oracle ci-dessous 9i ne prend pas en charge ANSI syntaxe de jointure.

Utilisez cette option si vous êtes sur 8i et ci-dessous:

SELECT  a.*
FROM    dual a,
        (
        SELECT  *
        FROM    dual
        WHERE   1 = 1
        ) b
WHERE   1 = 1

Il semble correct pour moi et je suis en mesure d'exécuter dans 10g, mais il échoue avec 8i, version d'Oracle utilisez-vous?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top