[ PHP / ORACLE ] Longueur de ma requète.

Longueur de ma requète. [ PHP / ORACLE ] - Programmation

Marsh Posté le 30-07-2001 à 16:22:56    

Voilà je génère une requète mais elle s'avère être trop longue pour Oracle! Comment puis-je faire?
 
Voici le requète:
 
select COTATION.NOTE, COTATION.COMMUNE from COTATION where COTATION.COMMUNE in ('35001','35002',.....,'35003');
 
Si le nombre de possibilités dans le in est trop grand, j'ai un :
 
Warning: Ora_Parse failed (ORA-00936: Expression absente -- while processing OCI function OPARSE) in c:\tomcat\webapps\onel\php\essai\faire_fichier_xml.php on line 21
 
Savez??

Reply

Marsh Posté le 30-07-2001 à 16:22:56   

Reply

Marsh Posté le 30-07-2001 à 16:27:36    

Un table avec les cotations recherchées
+
 select COTATION.NOTE, COTATION.COMMUNE from COTATION where COTATION.COMMUNE in (select COTATION from cotations_recherchees);

Reply

Marsh Posté le 30-07-2001 à 16:36:09    

Le but de la requète c'est d'obtenir les NOTES des communes de la liste.(c'est pas fonction de la valeur de la note)
et pis les n° des communes sont sélectionnés dans une liste et ne correspondent donc pas à l'ensemble des communes d'une table, c'est vraiment une liste de valeurs.

Reply

Marsh Posté le 30-07-2001 à 16:41:58    

Je me suis trompé dans la requete  
 
select COTATION.NOTE, COTATION.COMMUNE from COTATION where COTATION.COMMUNE in (select COTATION.COMMUNE from cotations_recherchees);  
 
 
Tu fais une table avec la liste des valeurs. Et la requete va chercher dedans

Reply

Marsh Posté le 30-07-2001 à 17:06:40    

J'ai une autre solution mais je me demande laquelle est la plus rapide:
 
1: créer une table contenant le n° des communes recherchée
-insert into LISTE(n°commune);
-select COTATION.NOTE,COTATION.COMMUNE from COTATION where COTATION.COMMUNE in (select * from LISTE);
 
ou
 
2: utiliser les OR et les in. Une requète SQL est limitée à 64 OR et 64 in, en utilisant les 2 on arrive à un nombre suffisament élevé:
 
select COTATION.NOTE,COTATION.COMMUNE
from COTATION  
where COTATION.COMMUNE in ('...','...',....,'...')
OR
COTATION.COMMUNE in('...',...,'...')
OR
...
OR
COTATION.COMMUNE in('...',...,'...');
 
Ou avec plusieurs UNION aussi??
Vous avez déjà essayé???
La création d'une table (ou les insert du moins) représente la solution la plus rapide?

Reply

Marsh Posté le 30-07-2001 à 21:53:33    

1-insert into LISTE(commune);  
2-select COTATION.NOTE,COTATION.COMMUNE from COTATION, liste where COTATION.COMMUNE=LISTE.commune;  
 
Ca devrait être plus rapide comme çà !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 31-07-2001 à 10:48:52    

Y a un problème avec la méthode des insert :
 
Il faut gérer les accès concurents! Si deux personnes interrogent la page en même temps, ils vont tous les deux insérer dans la table ou l'un va supprimer ce que l'autre a ajouté par exemple.
 
Y a pas moyen avec une simple requête??

Reply

Marsh Posté le 31-07-2001 à 11:45:04    

Sinon dans le même style, comment faites-vous quand vous stoker une image sur votre dur (une image générée différente à chaque fois) ou un fichier, il y a le même prob d'accès concurent???
Vous générer un fichier avec un nom aléatoire ou contenant un id de session??
Dans ce cas quand et comment supprimez vous les fichiers pour ne pas surcharger le disque dur???

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed