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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requete sql à changer

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requete sql à changer

n°369208
tchoupinet​te
Posté le 23-04-2003 à 10:31:16  profilanswer
 

voici la requete sql que je dois changer :
 
select c.cnt_id,c.cat_id,c.cnt_publish_all from gko_content c start with c.cnt_id=42 connect by prior c.cnt_id_next=c.cnt_id for update;
 
cette requete permet de retrouver toutes les versions supérieures d'un contenu donné (j'ai la meme requete pour retrouver les versions inférieures).
Voici à quoi ressemble la table :
 
GKO_CONTENT(CNT_ID Number(12), LNG_ID Number(12), CAT_ID Number(12), CNT_VERSION Number(12), CNT_ID_NEXT Number(12), CNT_NAME Varchar2(100), CNT_PRIORITY Number(12), PKG_ID Number(12), CNT_BEGIN_DATE date, CNT_END_DATE Date, CNT_PUBLISH_ALL Number(1), PDT_ID Number(12))
 
je dois transformer cette requete pour qu'elle ne contienne plus le start with et le connect by prior. Si quelqu'un pouvait m'aider j'en serai ravie...
 
merci d'avance
 
 :hello:


Message édité par tchoupinette le 23-04-2003 à 10:41:39
mood
Publicité
Posté le 23-04-2003 à 10:31:16  profilanswer
 

n°369237
Mara's dad
Yes I can !
Posté le 23-04-2003 à 11:03:04  profilanswer
 

c'est quoi comme base ?
 
Je ne connais pas 'start with' ni 'connect by prior' mais essayons de deviner...
 

Code :
  1. select
  2. c.cnt_id,
  3. c.cat_id,
  4. c.cnt_publish_all
  5. from
  6. gko_content c
  7. where
  8. with c.cnt_id >= 42
  9. and c.cnt_id_next=c.cnt_id
  10. for update;


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°369312
tchoupinet​te
Posté le 23-04-2003 à 11:47:35  profilanswer
 

c une base oracle

n°369314
MagicBuzz
Posté le 23-04-2003 à 11:48:07  profilanswer
 

Mara's dad > "start with" et "connect by prior" sont spécifiques à Oracle. Cela permet de parcourir une table arborescente (avec des relations père-fils sur elle-même).
 
Ta requête ne va retourner que les éléments du niveau n-1, et même... Non en fait elle est complètement foireuse :D
 
Tchoupinette > Tu n'as malheureusement aucun moyen de remplacer cette fabuleuse fonction d'Oracle.
 
Ton seul salut est de passer par une préocédure stockée qui te retourne un recrodset, et encore, je suis pas certain que tu puisse faire grand chose avec ça.
 
Donc il va falloir que tu passes par un programme externe.
 
Sinon, c'est quoi le "for update" ?
 
requête :
 
select c.cnt_id, c.cat_id, c.cnt_publish_all  
from gko_content c
where c.cnt_id_next = $id
for update
 
Il faut la faire tourner une première fois avec $id = 42
Puis pour chaque ligne retournée, la faire tourner avec le cnt_id retourné, et ainsi de suite jusqu'à ce que tu n'aies plus de lignes retournées.
 
Comme tu vois, ce type de schéma très spécifique à Oracle est ingérable pour un autre SGBD.
En fait, les bases de données relationnelles ne sont pas du tout faites pour gérer des arbres/listes chaînées.

n°369388
tchoupinet​te
Posté le 23-04-2003 à 13:48:05  profilanswer
 

mais pourtant il va falloir que je trouve un moyen de changer cette requete. Le but étant de passer une application en multibase...

n°369795
MagicBuzz
Posté le 23-04-2003 à 18:53:28  profilanswer
 

cherche si multibase offre ce type de fonctions, généralement, tu trouveras la doc dans un article chez multibase intitulé "Migrating Oracle to Multibase"

n°369796
MagicBuzz
Posté le 23-04-2003 à 18:55:49  profilanswer
 

Genre dans MDSN, pour le passage de Oracle à M$ SQL Server :
 

Citation :

SQL Server does not support the Oracle START WITH?CONNECT BY clause. You can replace this in SQL Server by creating a stored procedure that performs the same task.


 
Voilà, quand tu lis ça, t'as plus qu'à pleurer :D

n°369798
MagicBuzz
Posté le 23-04-2003 à 19:04:12  profilanswer
 

Article trouvé sur le net à propos de l'implémentation d'une telle fonction en T-SQL (l'équivalent de PL/SQL sous SQL Server)
 
http://vyaskn.tripod.com/hierarchi [...] abases.htm
 
Le T-SQL est très peut différent du PL/SQL, et à priori, très similaire à l'importe quelle autre langage de procédures stockées sur les autres SGBD. Avec ça tu devrais donc pouvoir t'en sortir.


Message édité par MagicBuzz le 23-04-2003 à 19:04:26

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

  Requete sql à changer

 

Sujets relatifs
RESOLU [SQL] Comment faire une telle requète dans une DB multivaluée?[ MySQL ] Incrémenter un champ en une requete.
[C/C++]HTTP Requete POST pour uploader un fichierErreur d'execution 94 avec MS VB ==> besoin aide requete SQL
[Access] acceder à une requête pas encore executéeRequête mise à jour dans ACCESS 97
temps d'execution d'une requete SQL[HTML, JS] Changer la taille d'un frameset en JS ?
[SOAP] Changer l'encoding d'une requête[Delphi SQL] changer la table d'un requête avec un TPARAM ..
Plus de sujets relatifs à : Requete sql à changer


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