Urgent-parcourir une chaine de caractère
gator -
j'arrive pas à résoudre ce pb :
j'ai cette chaine de car par exple :
select * from t1,t2,t3
et je veux parcourir cette chaine et récupérer après t1 t2 et t3
comment il faut faire svp?!
38 réponses
- 1
- 2
La problématique consiste à extraire les noms de tables t1, t2 et t3 d'une requête SQL du type 'select * from t1,t2,t3' utilisée dans une procédure stockée sous SQL Server.
Plusieurs répondants considèrent que parser du SQL en C dans une procédure stockée est complexe et risqué, et privilégient une refonte de la solution plutôt que l'écriture d'un parseur.
D'autres évoquent l'utilisation des procédures stockées avec le langage C, mais soulignent que réaliser une grammaire complète et créer un parseur reste lourd, fragile et peu fiable côté sécurité.
En cas de besoin réel, certains suggèrent d'étudier des solutions alternatives qui évitent le parsing SQL en C, par exemple en s'appuyant sur des métadonnées ou sur des mécanismes natifs du serveur.
-
Bonjour Soussou.
De quel(s) outil(s) disposes-tu ?
Tu veux faire ça en quel langage ?
(:•Þ Pitu -
Ben déjà là tu nous fait un beau produit cartésien, de quoi mettre ton serveur SQL à genous.
Comme dit Pitu, dans quel langage programmes-tu ?
t1 t2 et t3, ce sont bien des tables ? -
-
Je ne vois pas bien ce que tu veux faire.
Tu pourrais expliquer un peu ?
Tu travailles avec quel serveur SQL ? Microsoft SQL Sever, Oracle, autre ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
j'utilise sql server, et j'ai une procédure stockée dans laquelle, je veux faire ce traitement :
j'ai par exple cette requete sql : select * from t1, t2,t3,t4
je veux récupérer dans cette requête les tables t1,t2,t3 et t4
alors puisque ds les procédures stockées, on utilise le langage c, je me suis dis on peut utiliser les fonct c pr parcourir cette chaine de caractère (la requête sql ) et récupérer les tables (en vérifiant ce qui est après 'from'...)
voilà, j'espère que j'ai été claire
merci d'avanace -
Bon... d'abord est-ce que tes tables t1,t2,t3 et t4 ont exactement la même structure ?
-
ces noms quelconques. Pr le moment, je veux juste résoudre le cas simple, sinon après ça sera plus compliqué, cad j'aurai une structure comme ça : select * from t1 a 'table1', t2....
-
Je repose ma question:
Est-ce que tes tables auront exactement la même structures ?
Si la réponse est oui, alors on peut effectivement ramener toutes les données avec une seule requête.
Si la réponse est non, c'est tout simplement impossible. -
-
Sans ce cas tu peux faire:
select * from t1
union all
select * from t2
union all
select * from t3
ça permet de ramener le contenu des tables dans un même recordset. -
-
Ben oui je ne vois pas l'intéret de ramener toutes les tables pour mouliner dessus ensuite.
Autant faire faire le travaille de filtrage par le serveur SQL...
Mais il faut que tu explique un peux plus précisément ton problème. -
pr le moment je veux récupérer les tables ds une requête simple : select * from t1,t2,t3
mais après je peux avoir une requête plus compliquée :
select * from t1 as table1,t2 where i in (select * from t3)...
donc je crois qu'on peut pas faire ça. -
Tu connais les jointures SQL ?
-
-
select * from t1 as table1,t2
ça ne ramènera rien de bon.
Si tu as 2 tables dans ta clause FROM, il te faut une condition de jointure entre les table t1 et t2.
Et tu ne peux pas utiliser *. Tu est obligé de nommer les champs que tu veux ramener. -
pas nécessairement. je peux ne pas mettre des conditions si je veux afficher le contenu de ttes les tables.
-
et bien si tu veux afficher le contenu de toutes les tables:
select * from t1;
select * from t2;
select * from t3; -
je veux pas afficher le contenu des tables, mais je veux avoir le nom des tables, voici un exple de ce que je veux :
j'ai une requête (chaîne de car) : select * from t1,t2,t3,t4
je veux récupérer de cette chaîne : t1 t2 t3 et t4.
cad, il faut que je parcours la requête qd je trouve le mot 'from', je récupère ts les noms des tables ds la clause from. -
Bon, je crois avoir bien compris ce que tu veux faire, mais tu ne m'as pas répondu quant au langage dans lequel tu veux faire ça.
Est-ce en shell unix ? en C ? en Cobol ? Veux-tu juste un algorithme ?
Pour traduire ta question et amener d'autres personnes à te répondre, je dirais que tu souhaites analyser la syntaxe d'une requête SQL pour en extraire les noms des tables impliquées.
(:•Þ Pitu
- 1
- 2