Requete sql à changer

Requete sql à changer - SQL/NoSQL - Programmation

Marsh Posté le 23-04-2003 à 10:31:16    

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
Reply

Marsh Posté le 23-04-2003 à 10:31:16   

Reply

Marsh Posté le 23-04-2003 à 11:03:04    

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é.
Reply

Marsh Posté le 23-04-2003 à 11:47:35    

c une base oracle

Reply

Marsh Posté le 23-04-2003 à 11:48:07    

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.

Reply

Marsh Posté le 23-04-2003 à 13:48:05    

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

Reply

Marsh Posté le 23-04-2003 à 18:53:28    

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"

Reply

Marsh Posté le 23-04-2003 à 18:55:49    

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

Reply

Marsh Posté le 23-04-2003 à 19:04:12    

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
Reply

Sujets relatifs:

Leave a Replay

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