Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2011, 12h04   #1
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Par défaut ORA-00907 Missing right parenthesis

Bonjour,

J'ai une erreur ORA-00907 Missing right parenthesis lorsque que je lance ma requête.
J'ai bien vérifié il ne manque pas de parenthèse, il n'y a pas de virgule qui traine...

Structure de mes tables :

Code :
1
2
3
4
5
6
7
8
B
--
idB
c
d
e
f
g
Ma requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
SELECT 'Inconnu' Lieu_de_naissance, count(*) Nombre
FROM A 	
	JOIN B	
		ON A.idB = B.idB
WHERE (
	A.idA IN ('nb',...) 
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)  
	OR A.idA IN ('nb',...)
)
AND B.c IS NULL 
AND B.d IS NULL 
AND B.e IS NULL 
AND B.f IS NULL 
AND B.g IS NULL
Sachant qu'il faut remplacer 'nb',.. par le nombre maximum d'instances acceptées par in.
Lorsque que je réduis les instances de A.idA in (..) je n'ai plus de problèmes, est-ce qu'il existe un nombre minimal d'instance dans des parenthèses ?
Je n'ai pas trouvé d'autre méthode pour comparer idA avec des nombres que d'enchainer les in (parce qu'ils sont limités à 1000 valeurs), si quelqu'un à une autre idée qu'il n'hésite pas !!!
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 12h10   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Beaucoup plus simplement, mettez votre liste dans une table et faite une jointure.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/11/2011, 12h15   #3
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par Waldar Voir le message
Beaucoup plus simplement, mettez votre liste dans une table et faite une jointure.
Malheureusement je ne peux pas créer de table. Je n'ai accès qu'en lecture à la base et dois donc me débrouiller avec des requêtes.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 12h29   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous avez combien de valeur ?
Si vous ne pouvez pas faire de table, vous pouvez toujours la simuler au moment de l'exécution :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH SR AS
(
SELECT 'nb1' AS idA FROM dual union ALL
SELECT 'nb2'        FROM dual union ALL
SELECT 'nb3'        FROM dual union ALL
...
SELECT 'nb999999'   FROM dual
)
SELECT 'Inconnu' Lieu_de_naissance
     , count(*) Nombre
  FROM A 
       INNER JOIN B	
         ON B.idB = A.idB
       INNER JOIN SR
         ON SR.idA = A.idA
 WHERE B.c IS NULL 
   AND B.d IS NULL 
   AND B.e IS NULL 
   AND B.f IS NULL 
   AND B.g IS NULL;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 12h46   #5
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par Waldar Voir le message
Vous avez combien de valeur ?
Environ 61000
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 13h06   #6
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Question bête, avec quoi construisez-vous et exécutez-vous votre requête ? Java, DotNet, php, ... ?

On peut passer à Oracle des objets de type TABLE OF NUMBER, et faire quelque chose du genre :

Code :
1
2
3
4
 
SELECT mesChamps
  FROM maTable
 WHERE maTable.champ MEMBER OF :valuesArray;
En exécutant la requête avec un bind sur ":valuesArray". En java ça se fait très bien

EDIT : vérif ok !
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 14h45   #7
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par Rei Ichido Voir le message
Question bête, avec quoi construisez-vous et exécutez-vous votre requête ? Java, DotNet, php, ... ?

On peut passer à Oracle des objets de type TABLE OF NUMBER, et faire quelque chose du genre :

Code :
1
2
3
4
 
SELECT mesChamps
  FROM maTable
 WHERE maTable.champ MEMBER OF :valuesArray;
En exécutant la requête avec un bind sur ":valuesArray". En java ça se fait très bien

EDIT : vérif ok !
Je lance mes requête directement sur TOAD, il s'agit de comptages occasionnels.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 14h57   #8
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par Waldar Voir le message
Vous avez combien de valeur ?
Si vous ne pouvez pas faire de table, vous pouvez toujours la simuler au moment de l'exécution :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
WITH SR AS
(
SELECT 'nb1' AS idA FROM dual union ALL
SELECT 'nb2'        FROM dual union ALL
SELECT 'nb3'        FROM dual union ALL
...
SELECT 'nb999999'   FROM dual
)
SELECT 'Inconnu' Lieu_de_naissance
     , count(*) Nombre
  FROM A 
       INNER JOIN B	
         ON B.idB = A.idB
       INNER JOIN SR
         ON SR.idA = A.idA
 WHERE B.c IS NULL 
   AND B.d IS NULL 
   AND B.e IS NULL 
   AND B.f IS NULL 
   AND B.g IS NULL;
J'ai essayé cette méthode mais malheureusement c'est trop lourd pour toad, il a planté !!
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h23   #9
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
Question idiote mais on ne sais jamais : est-ce que le NOT IN concernerait moins de valeurs ?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h35   #10
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
Question idiote mais on ne sais jamais : est-ce que le NOT IN concernerait moins de valeurs ?
Ben j'ai déjà fait d'autres requêtes et la limitation était de 1000 occurrences.
D'ailleurs, l'erreur renvoyée était différente.
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h36   #11
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut,

Je suppose que tes id en entrées, tu les trouves dans un fichier que tu bidouilles ensuite pour transformer en requête ?

Je pense que le mieux est de bidouiller encore plus : tu transformes chaque ID en SELECT unitaire (genre qui te renvoie 1 quand tu trouves), tu lances avec SQL*Plus en redirigeant la sortie dans un fichier, puis tu trouves un moyen de compter le résultat.
(Shell script, ou avec Excel, ...)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 15h46   #12
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par pacmann Voir le message
Salut,

Je suppose que tes id en entrées, tu les trouves dans un fichier que tu bidouilles ensuite pour transformer en requête ?
Exactement, sinon ça serait pas marrant !!

Citation:
Envoyé par pacmann Voir le message
Je pense que le mieux est de bidouiller encore plus : tu transformes chaque ID en SELECT unitaire (genre qui te renvoie 1 quand tu trouves), tu lances avec SQL*Plus en redirigeant la sortie dans un fichier, puis tu trouves un moyen de compter le résultat.
(Shell script, ou avec Excel, ...)
Je n'ai accès qu'à TOAD, je vais voir si je peux faire ça. Merci de la bidouille
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 18h39   #13
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Sous Toad (du moins dans la config que je j'utilise), tu as un mode "exécuter avec SQL*Plus)... par contre ça risque de tuer ton poste

Nan mais plus sérieusement, tu ne peux pas faire une demande spéciale de création de table et inserts pour l'occasion ?
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h06   #14
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Citation:
Envoyé par lola06 Voir le message
Je lance mes requête directement sur TOAD, il s'agit de comptages occasionnels.
Il te faudrait :
- Le privilège nécessaire pour créer et exécuter des procédures
- Le privilège pour créer un type (sur ce dernier, si tu peux demander à ce qu'il soit créé une fois, ça le fait aussi bien).
Tu pourrais alors utiliser des table of number et t'en sortir.

Une petite question quand même : ces listes de 61000 valeurs (ce qui doit déjà être pénible à recopier !!! J'imagine un fichier excel ... ), elles sortent d'où ? Il n'y a pas moyen de les retrouver en base, avec un select ?
Et si elles viennent d'une autre base, il n'y a pas moyen de faire un petit DBLink entre les deux ?
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h47   #15
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Citation:
Envoyé par pacmann Voir le message
Nan mais plus sérieusement, tu ne peux pas faire une demande spéciale de création de table et inserts pour l'occasion ?
Cette solution n'est malheureusement pas envisageable pour le moment, c'est vrai que ça serait sympa d'avoir une base de développement sur laquelle on peut faire ce qu'on veut !!!

Citation:
Envoyé par Rei Ichido Voir le message
Il te faudrait :
- Le privilège nécessaire pour créer et exécuter des procédures
- Le privilège pour créer un type (sur ce dernier, si tu peux demander à ce qu'il soit créé une fois, ça le fait aussi bien).
Tu pourrais alors utiliser des table of number et t'en sortir.

Une petite question quand même : ces listes de 61000 valeurs (ce qui doit déjà être pénible à recopier !!! J'imagine un fichier excel ... ), elles sortent d'où ? Il n'y a pas moyen de les retrouver en base, avec un select ?
Et si elles viennent d'une autre base, il n'y a pas moyen de faire un petit DBLink entre les deux ?
Effectivement ces données sont issues d'une autre base, sauf qu'aucun lien entre ces bases n'est autorisé. Elles communiquent par XML pour les traitements quotidiens et on extrait les données en Excel pour les besoins ponctuels (comme mon problème).

De toute manière c'est un sujet de fond et là on m'a donné des analyses à effectuer qui sont plus urgentes.

Merci pour votre aide, je reviendrais sans doute
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 14h34   #16
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Sérieusement, remonte une alerte à tes supérieurs. On ne peut pas, on ne DOIT pas, gérer une quantité de plus de 60 000 éléments "à la main". Au minimum, une table externe ! C'est vite fait, ça ne remet pas en cause la structure de la base ni ne consomme du filesystem (enfin quand même un peu, il faut bien stocker les fichiers quelque part, mais c'est déjà le cas), et ça t'évitera bien des soucis tout en permettant une certaine automatisation (ce qui devrait plaire aux chefs, ça fait gagner du temps donc des sous).
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/12/2011, 16h45   #17
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bon finalement j'ai pu passer mes requêtes lorsque je les séparaient en deux, là aucun problème et plus d'erreur de parenthèse droite manquante !!

Je vais donc mettre ce sujet .

Merci à tous d'avoir participé
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h24.


 
 
 
 
Partenaires

Hébergement Web