Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1514 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD/SQL] Alternative à duplication de lignes par non-equijoin?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SGBD/SQL] Alternative à duplication de lignes par non-equijoin?

n°1989055
lasnoufle
La seule et unique!
Posté le 30-04-2010 à 12:37:26  profilanswer
 

Bonjour,
 
J'ai une p'tite question sur une de mes requetes. Pour le moment elle marche mais c'est moche et ca garantit pas le résultat, mais j'arrive pas trop à tourner ca autrement, donc je voudrais juste voir si quelqu'un a une idée pour améliorer ca.
 
J'isole et je simplifie l'endroit qui m'intéresse, c'est dans une requete plus grande:

Code :
  1. SELECT i.gfid, MDSYS.SDO_UTIL.EXTRACT(i.gfgeom,i.idx,0) AS geometry
  2. FROM ( SELECT tb.gfid, dt.id idx, tb.gfgeom
  3.   FROM ( SELECT gf.id as gfid, SDO_GEOM.SDO_INTERSECTION(:new.geometry,gf.geometry,0.005) as gfgeom
  4.      FROM geo_features gf
  5.     ) tb
  6.   JOIN dummy_table dt ON SDO_UTIL.GETNUMELEM(gfgeom)>= ID
  7.   WHERE gmgeom IS NOT NULL
  8.  ) i


Ce que je veux faire: SDO_GEOM.SDO_INTERSECTION génère potentiellement une collection, et j'ai besoin de splitter la collection en éléments simples.
Pour cela, j'utilise MDSYS.SDO_UTIL.EXTRACT, qui prend en paramètres la collection et l'index de l'élément à extraire de la collection, et retourne l'élément indiqué.
Bon.
Il me faut extraire tous les éléments donc entre les deux fonctions, il me faut générer une table qui aura, pour chaque élément d'une collection, une ligne avec la collection elle-meme et l'index de l'élément.
Par exemple si la requete interne retourne une collection (je schématise) [elem1, elem2, elem3], il faut que je génère une table:
IDX  GFGEOM
1  [elem1, elem2, elem3]
2  [elem1, elem2, elem3]
3  [elem1, elem2, elem3]
 
Ma solution (moche) est d'utiliser une autre table (dummy_table dans la requete) qui se contente d'énumérer les entiers positifs, et de faire un non-equijoin dessus basé sur le nombre d'éléments de la collection (SDO_UTIL.GETNUMELEM(gfgeom)>= ID).
Comme je disais, ca marche bien.
Mais comme je disais, je trouve ca moche au possible.
Et conceptuellement, ca me gene parce que dummy_table a un nombre fini d'éléments, donc si jamais la collection dépasse ce nombre, le résultat de la requete sera faux. Bon, en pratique, suffit de placer ca assez haut pout que la base de données plante avant de pouvoir générer une collection suffisament grosse pour matcher la limite, comme ca je suis "couvert".
 
Bref.
Des idées?
Merci d'avance.


---------------
C'était vraiment très intéressant.
mood
Publicité
Posté le 30-04-2010 à 12:37:26  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD/SQL] Alternative à duplication de lignes par non-equijoin?

 

Sujets relatifs
Novice en SQL[Résolu] Lignes de code CSS venues de Saturne ?
CSV to SQL : LOAD DATA INFILERechercher et modifier des lignes dans un fichier
[Résolu] Pertinence. MATCH/AGAINSTVba supprimer plusieurs lignes if then end if
[SQL Server Express] Connexion distante à SQL Server ExpressPb d'insertion de données SQL
[RESOLU] Requete SQL avec variable dynamique sous MS-DOSerreur de syntaxe (vb.net, SQL server)
Plus de sujets relatifs à : [SGBD/SQL] Alternative à duplication de lignes par non-equijoin?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR