2009-10-07 2 views
0

Voici ma question:Oracle manquant Parenthèse

SELECT * FROM Auta WHERE SUBSTR(spz, 1, 2) = 
(SELECT SUBSTR(spz, 1, 2) FROM Auta WHERE typ = 'BMW' AND specifikacia_typu = 'Z1' LIMIT 1); 

Et quand je le lance je reçois cette erreur:

ORA-00907: missing right parenthesis 

Je suis un peu désespéré, je l'ai déjà essayé d'ajouter parenthèses partout dans la requête et je reçois toujours l'erreur? Il y a 3 parenthèses à gauche et 3 à droite dans la requête, donc tout devrait bien se passer.

Répondre

7

La clause LIMIT n'existe pas dans Oracle. Au lieu de cela, vous utiliseriez rownum:

SELECT * 
    FROM Auta 
WHERE SUBSTR(spz, 1, 2) = (SELECT SUBSTR(spz, 1, 2) 
           FROM Auta 
          WHERE typ = 'BMW' 
           AND specifikacia_typu = 'Z1' 
           AND ROWNUM = 1); 
+1

vous remercie. Je suis nouveau à Oracle, je suis habitué à MySQL et PostgreSQL :) –

+0

Vous devez faire attention avec la syntaxe "ROWNUM = 1". Je ne sais pas si cela fonctionnera dans ce scénario ou non, mais l'enregistrement renvoyé par la sous-requête est indéterminé, c'est-à-dire que vous pouvez obtenir différents enregistrements renvoyés chaque fois que vous exécutez la requête. Si vous voulez un retour cohérent, enveloppez la sous-requête dans une autre sous-requête avec un "ordre par". –

+0

@Nick: le résultat de la LIMIT 1 d'origine serait également indéterminé. Il n'y a pas de commande de toute façon, donc j'ai supposé que n'importe quelle rangée serait ok. –

3

Qu'est-ce que "LIMIT 1" pour? Je ne crois pas que la syntaxe Oracle soit correcte. Si vous essayez de limiter la sortie à une ligne, utilisez:

OÙ rownum = 1

3

LIMITE 1 est un MySQLism, pour autant que je sache.

SELECT * 
    FROM Auta 
    WHERE SUBSTR(spz, 1, 2) = 
     (SELECT SUBSTR(spz, 1, 2) 
      FROM Auta 
     WHERE typ = 'BMW' 
      AND specifikacia_typu = 'Z1' 
      AND ROWNUM = 1); 

... devrait vous donner les résultats escomptés