IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Java Regex sur requête SQL - SELECT FROM


Sujet :

Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Java Regex sur requête SQL - SELECT FROM
    Bonjour à tous,
    J'ai un soucis avec mon regex et je suis coincée depuis un jours.
    J'ai une requête sql complexe sur plusieurs lignes, je dois récupérer les tables qui se trouvent après le FROM d'un SELECT.

    Ceci est une partie de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    DELETE FROM hrep_item_prestatie_year_activitylevel;
    INSERT INTO hrep_item_prestatie_year_activitylevel(orgnum, activity_id, mandays, YEAR) 
    	SELECT 	 hrep_item_prestatie_year.orgnum, 
    		hrep_item_prestatie_year.activity_id,
    		SUM(hrep_item_prestatie_year.mandays),
    		hrep_item_prestatie_year.year
    		FROM hrep_item_prestatie_year
    		GROUP BY orgnum, activity_id, YEAR; 
    
    INSERT INTO  hrep_item_prestatie_year_activitylevel(orgnum, activity_id, mandays, YEAR) 
    	SELECT 	claudia.orgnum, 
    		claudia.activity_id,
    		SUM(claudia.mandays),
    		claudia.year
    		FROM claudia
    		GROUP BY orgnum, activity_id, YEAR;
    
    SELECT a.asset, 
    		a.nsn, 
    		a.serial AS MAC, 
    		(SELECT c.value FROM MRQR_DYNAMIC_CHARACTERISTICS c WHERE c.udt_table = 'ASSETS' AND c.name = 'ASS_CIS_INSTALLTYPE' AND c.descriptor_value = a.asset) AS INSTALL,
    	FROM   MRQR_ASSETS a;
    Je dois pouvoir récupérer les tables :
    - hrep_item_prestatie_year
    - claudia
    - MRQR_DYNAMIC_CHARACTERISTICS
    - MRQR_ASSETS

    J'ai essayé avec plusieurs regex, mais du fait que j'ai le FROM après plusieurs ligne du SELECT ça ne marche pas...
    Et je dois absolument lui dire que c'est le FROM du SELECT si non il ira me prendre la table de la première ligne (celle du DELETE).
    En utilisant "(?m)(?s)SELECT\\s.*\\W+FROM?\\s+(\\w*)" je récupère seulement la dernière table MRQR_ASSETS.
    Pouvez-vous m'aider svp?

    Merci d'avance,
    Claudia

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Hello,

    on ne peut pas utiliser de regex pour des structures imbriquées (tu as un select à l'intérieur d'un autre select, et tu veux analyser les deux. Une regex ne peut pas faire ça, en tout cas pas le cas général). Tu vas devoir faire un parseur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Salut Thelvin,

    Merci de m'avoir répondu. J'utilises d'autres regex (plus simples) dans mes structures imbriquées MySQL comme par exemple celle-ci : FROM?\\s+(\\w*) ou celle ci JOIN?\\s+(\\w*) pour récupérer les tables qui se trouvent après le FROM ou après le JOIN et elles fonctionnent très bien.
    Mais pour celle concernant le FROM j'ai besoin qu'elle soit modifié et qu'elle considère seulement les FROM après un SELECT.
    Comment faire un parser? J'en ai jamais fait...
    Peux-tu m'aider stp?

    Merci d'avance.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Ben comme tu viens si bien de le dire, tes regex qui marchent, se font sur des structures qui en réalité ne sont pas imbriquées. "Imbriquer" ça veut dire quelque chose d'un peu plus compliqué que mettre entre parenthèses. Ça veut dire qu'on besoin de s'assurer que c'est seulement avec des select.

    Celle-ci, avec deux select l'un contenu dans l'autre, si.

    Si tu préfères, le problème se voit mieux si ce n'est pas tellement l'imbrication qui nous gêne, mais la récursion rendue possible par l'imbrication.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Oui je comprends mieux ce que tu veux dire maintenant.
    Est-ce que tu saurais m'aider pour avoir une idée de comment m'y prendre stp?

    Merci d'avance.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Ah ben, SQL est un langage. Là 'faut faire un parseur, quand on sait pas faire ça s'explique pas en trois mots.

    Je suppose que tu peux te renseigner sur JFlex.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Requête SQL selective sur une somme avec jointure
    Par wind_vinch dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/05/2016, 16h20
  2. Problème requête SQL select * from( select )
    Par yacinew dans le forum Paradox
    Réponses: 1
    Dernier message: 12/04/2015, 08h15
  3. Requête SQL select sur date
    Par delavega dans le forum ASP
    Réponses: 2
    Dernier message: 08/01/2012, 17h50
  4. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 18h53
  5. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo