Requete sql à changer - SQL/NoSQL - Programmation
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 :
|
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
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.
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...
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"
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
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.
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
Message édité par tchoupinette le 23-04-2003 à 10:41:39