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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Déclaration de requête SQL en XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Déclaration de requête SQL en XML

n°1476462
paf27
Paf Was Here !!!
Posté le 16-11-2006 à 14:54:52  profilanswer
 

Salut le forum,
 
Je suis à la recherche d'une dtd ou d'une exemple de fichier XML qui contiendrai non pas le résultat d'une requête SQL mais bel et bien la requête SQL elle même.
 
Le besoin est de pouvoir "stocker" sous la forme de fichier XML un ensemble de requête XML
 
Merci d'avance pour vos réponses

mood
Publicité
Posté le 16-11-2006 à 14:54:52  profilanswer
 

n°1476473
MagicBuzz
Posté le 16-11-2006 à 15:03:31  profilanswer
 

:heink:
 


<queries>
  <query>select * from truc</query>
  <query>select * from truc</query>
  <query>select * from truc</query>
</queries>


 
:heink:
 
ou à la limite :
 
http://david.manga-torii.com/views/v_attributs.xml
(y'a un lien vers ma dtd dans le fichier)


Message édité par MagicBuzz le 16-11-2006 à 15:03:37
n°1476713
paf27
Paf Was Here !!!
Posté le 16-11-2006 à 17:21:47  profilanswer
 

Merci mais ce n'est pas aussi simple que cela.
Je cherche une méthodologie déclarative permettant de couvrir la syntaxe compléte d'une requête SQL.
 
Pur exemple un peu simplet
 
<SQL result= “client_1”>
 <SELECT table= “client”>
  <FIELD_NAME>nom</FIELD_NAME >
  <FIELD_NAME>prenom</FIELD_NAME>
  <WHERE>
   <FIELD_NAME >nom</FIELD_NAME >
   <TYPE>EQUAL</TYPE >
   <VALUE>DUPONT</VALUE>
  </WHERE>
 </SELECT>
</SQL>
 
Parser et traduit en  
=> Select nom,prenom from client whete nom="DUPONT"
=> client 1 étant une donnée de récupération (table de hash par exemple)
 
 
si cela existe...


Message édité par paf27 le 16-11-2006 à 17:24:34
n°1476743
MagicBuzz
Posté le 16-11-2006 à 17:46:38  profilanswer
 

sauf qu'une requête SQL, c'est un peu plus compliqué que ça à la base.
 
tu pourras toujours tenter de faire un DTD qui permet de modéliser une requête, mais je doute TRES fortement que tu y arrive sans faire une usine à gaz monstrueuse et buggée ;)

n°1476802
paf27
Paf Was Here !!!
Posté le 16-11-2006 à 19:51:22  profilanswer
 

MagicBuzz a écrit :

sauf qu'une requête SQL, c'est un peu plus compliqué que ça à la base.
 
tu pourras toujours tenter de faire un DTD qui permet de modéliser une requête, mais je doute TRES fortement que tu y arrive sans faire une usine à gaz monstrueuse et buggée ;)


 
L'impossible n'est pas Paf  ;)  
Concrétement, je sais exactement quoi faire si ce n'est cette histoire de dtd que j'aurai aimé déjà +/- normalisé.(Avec un petit outil open source java qui va bien  :D )
Il n'y aura pas que des instructions SQL simple à modéliser (Insert, select, create), pas d'index, de vue, etc...
 
Il ne s'agit pas d'un projet perso mais cela rentre dans un contexte professionnel

n°1476838
MagicBuzz
Posté le 16-11-2006 à 20:29:18  profilanswer
 

Et tu sauras interpréter ce genre de requêtes toutes bêtes ?
 


select
(
   select max(tsc.prix)  
   from tsc  
   where tsc.codsoc = pro.codsoc  
   and tsc.achvte = 'A'
   and tsc.codpro = pro.codpro  
   and getdate() between nvl(tsc.datdeb, getdate()) and nvl(tsc.datfin, getdate()
) curprx, pro.codpro, tmpprm.nompro, fou.nomtie
from
(
   select top 1 nompro
   from
   (
      select nompro
      from prm
      where prm.codsoc = pro.codsoc
      and prm.codpro = pro.codpro
      and prm.codlan = fou.codlan
      union all
      select nompro
      from pro p
      where p.codsoc = pro.codsoc
      and p.codpro = pro.codpro
   ) tmp1prm
) tmpprm, tie fou, pro
where pro.codsoc = @codsoc
and pro.codpro = @codpro
and fou.codsoc = pro.codsoc
and fou.typtie = 'FOU'
and fou.sigtie = pro.sigfou


 
Genre, c'est pas bien compliqué, ça te retourne, pour un produit dans une société donné, le prix maximum d'achat, son libellé dans la langue du fournisseur, ou à défaut, le nom non localisé, ainsi que le nom du fournisseur.
 
Moi je vote et je dis que rien que pour ce genre de petites requêtes à deux balles, tu risques d'en chier grave... (et c'est loin d'être compliqué comme requête)


Message édité par MagicBuzz le 16-11-2006 à 20:31:50
n°1476844
FlorentG
Unité de Masse
Posté le 16-11-2006 à 20:52:14  profilanswer
 

C'est plus un schéma XSD qu'une DTD qui """permetterait""" de faire ça :/

n°1476848
MagicBuzz
Posté le 16-11-2006 à 20:58:30  profilanswer
 

ça tombe bien, mon exemple est un XSD en fait :)
 
mais ne va pas aussi loin, chuis pas maso

n°1476852
paf27
Paf Was Here !!!
Posté le 16-11-2006 à 21:13:40  profilanswer
 

MagicBuzz a écrit :

ça tombe bien, mon exemple est un XSD en fait :)
 
mais ne va pas aussi loin, chuis pas maso


 
C'est pas un outil super open source normalisé geek de la mort avec un nom à la tu ma vue version 12.18 dont j'ai nécessairement besoin..
J'ai la chance de savoir quelles seront les requêtes à déclarer, et cela n'ira pas plus loin qu'une double imbrication.
La norme XML est là pour cela. Je poste pas ici pour que l'on me démontre que comme avec sega, il y a toujours plus fort que toi ! A priori bien pensé, n'importe quelle requête SQL doit pouvoir être déclaré sous cette forme.
 

n°1476854
MagicBuzz
Posté le 16-11-2006 à 21:16:24  profilanswer
 

Moi non plus, mon truc c'est pas un machin de Geek ope source de la mort, c'est un framework que je suis en train de développer pour le boulot :o

mood
Publicité
Posté le 16-11-2006 à 21:16:24  profilanswer
 

n°1476856
FlorentG
Unité de Masse
Posté le 16-11-2006 à 21:20:22  profilanswer
 

paf27 a écrit :

La norme XML est là pour cela. Je poste pas ici pour que l'on me démontre que comme avec sega, il y a toujours plus fort que toi ! A priori bien pensé, n'importe quelle requête SQL doit pouvoir être déclaré sous cette forme.


Justement, et t'as qu'a la faire à la freestyle, ne fait même pas de DTD, parse l'XML à la main comme ça... Parfois une DTD ou un XSD sont soit trop overkill, soit trop limité. Rien ne vaut un parsing à la main

n°1476866
MagicBuzz
Posté le 16-11-2006 à 21:56:03  profilanswer
 

Sinon, je te laisse faire la XSD, mais à la limite, si je me suis pas planté, ma requête peut être traduite en XML de cette façon :
 


<sql>
  <query>
    <selectClause>
      <fields>
        <field type="subQuery" alias="curprx">
          <query>
            <selectClause>
              <fields>
                <field type="function" name="max">
                  <functionParameters>
                    <field type="field" name="prix" table="tsc"/>
                  </functionParameters>
                </field>
              </fields>
              <tables>
                <table type="table" name="tsc"/>
              </tables>
              <filters>
                <clause opperation="EQUAL">
                  <field type="field" name="codsoc" table="tsc"/>
                  <field type="field" name="codsoc" table="pro"/>
                </clause>
                <opperator type="AND"/>
                <clause opperation="EQUAL">
                  <field type="field" name="achvte" table="tsc"/>
                  <field type="constant" sqlType="varchar" value="A"/>
                </clause>
                <opperator type="AND"/>
                <clause opperation="EQUAL">
                  <field type="field" name="codpro" table="tsc"/>
                  <field type="field" name="codpro" table="pro"/>
                </clause>
                <opperator type="AND"/>
                <clause opperation="BETWEEN">
                  <field type="function" name="getdate"/>
                  <field type="function" name="nvl">
                    <functionParameters>
                      <field type="field" name="datdeb" table="tsc"/>
                      <field type="function" name="getdate"/>
                    </functionParameters>
                  </field>
                  <field type="function" name="nvl">
                    <functionParameters>
                      <field type="field" name="datfin" table="tsc"/>
                      <field type="function" name="getdate"/>
                    </functionParameters>
                  </field>
                </clause>
              </filters>
            </selectClause>
          </query>
        </field>
        <field type="field" name="codpro" table="pro"/>
        <field type="field" name="nompro" table="tmpprm"/>
        <field type="field" name="nomtie" table="fou"/>
      </fields>
      <tables>
        <table type="subQuery" alias="tmpprm">
          <query>
            <selectClause directive="TOP" directiveParameter="1">
              <fields>
                <field type="field" name="nompro"/>
              </fields>
              <tables>
                <table type="subQuery" alias="tmp1prm">
                  <query>
                    <selectClause>
                      <fields>
                        <field type="field" name="nompro"/>
                      </fields>
                    <selectClause>
                    <tables>
                      <table type="table" name="prm"/>
                    </tables>
                    <filters>
                      <clause opperation="EQUAL">
                        <field type="field" name="codsoc" table="prm"/>
                        <field type="field" name="codsoc" table="pro"/>
                      </clause>
                      <opperator type="AND"/>
                      <clause opperation="EQUAL">
                        <field type="field" name="codpro" table="prm"/>
                        <field type="field" name="codpro" table="pro"/>
                      </clause>
                      <opperator type="AND"/>
                      <clause opperation="EQUAL">
                        <field type="field" name="codlan" table="prm"/>
                        <field type="field" name="codlan" table="fou"/>
                      </clause>
                    </filters>
                  </query>
                  <statement type="UNION"/>
                  <query>
                    <selectClause>
                      <fields>
                        <field type="field" name="nompro"/>
                      </fields>
                    <selectClause>
                    <tables>
                      <table type="table" name="pro" alias="p"/>
                    </tables>
                    <filters>
                      <clause opperation="EQUAL">
                        <field type="field" name="codsoc" table="pro"/>
                        <field type="field" name="codsoc" table="p"/>
                      </clause>
                      <opperator type="AND"/>
                      <clause opperation="EQUAL">
                        <field type="field" name="codpro" table="pro"/>
                        <field type="field" name="codpro" table="p"/>
                      </clause>
                    </filters>
                  </query>
                </table>
              </tables>
            </selectClause>
          </query>
        </table>
        <table type="table" name="tie" alias="fou"/>
        <table type="table" name="pro">
      </tables>
      <filters>
        <clause opperation="EQUAL">
          <field type="field" name="codsoc" table="pro"/>
          <field type="variable" name="codsoc"/>
        </clause>
        <opperator type="AND"/>
        <clause opperation="EQUAL">
          <field type="field" name="codpro" table="pro"/>
          <field type="variable" name="codpro"/>
        </clause>
        <opperator type="AND"/>
        <clause opperation="EQUAL">
          <field type="field" name="codsoc" table="fou"/>
          <field type="field" name="codsoc" table="pro"/>
        </clause>
        <opperator type="AND"/>
        <clause opperation="EQUAL">
          <field type="field" name="typtie" table="fou"/>
          <field type="constant" sqlType="varchar" value="FOU"/>
        </clause>
        <opperator type="AND"/>
        <clause opperation="EQUAL">
          <field type="field" name="sigtie" table="fou"/>
          <field type="field" name="sigfou" table="pro"/>
        </clause>
      </filters>
    </selectClause>
  </query>
</sql>


 
A noter que ma sous-requête dans le FROM l'empêche d'être jointe avec les autres tables avec une clause "inner join" classique.
Par contre, avec les "outer join", certaines choses sont impossibles à faire sans l'utilisation de la syntaxe littérale. Rien que pour ça, c'est limite impossible de modéliser ton truc (j'en ai fait que la moitié dans mon exemple)
Je ne parle pas non plus des imbrications d'oppérateurs pour les filtres (gestions de parenthèses), etc.
 
Je te laisse t'amuser ne serait-ce que pour écrire le XSD. Niveau structure, je pense être resté cohérent, et y'a pas de niveau de trop...
 
Franchement, reviens sur Terre : tu peux partir dans un truc bancale qui permet de stocker tes 3 requêtes. Mais si c'est pour faire un prog boîteux, incapable de tirer profit de cet éclatement de la requête (pkoi tu veux passer en XML d'abors ?) et ne pas être capable de gérer tous les cas, autant rester au niveau du fichier texte. Ca marche tout aussi bien :spamafote:

n°1476867
MagicBuzz
Posté le 16-11-2006 à 21:58:28  profilanswer
 

T'ain j'ai réussi à perdre 40 minutes de ma soirée sur ce truc juste pour lui démontrer que c'était débile :ouch:
 
Chuis fou moi :o


Message édité par MagicBuzz le 16-11-2006 à 22:35:50
n°1476868
MagicBuzz
Posté le 16-11-2006 à 21:59:41  profilanswer
 

Tiens, pis je viens de me rendre compte que j'avais oublié le group by dans ma requête originale. Démerde-toi avec :sleep:

n°1476870
MagicBuzz
Posté le 16-11-2006 à 22:08:25  profilanswer
 

Sinon, j'y pense... Pour avoir une ébauche de DTD "complète", t'as qu'à regarder la doc d'un SGBD... :spamafote:
 


SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ]  
<select_list>  
<select_list> ::=  
    {  
            *  
      | { table_name | view_name | table_alias }.*  
      | {
          [ { table_name | view_name | table_alias }. ]
               { column_name | $IDENTITY | $ROWGUID }  
          | udt_column_name [ { . | :: } { { property_name | field_name }  
            | method_name ( argument [ ,...n] ) } ]
          | expression
          [ [ AS ] column_alias ]  
         }
      | column_alias = expression  
    } [ ,...n ]  
 
 
[ FROM { <table_source> } [ ,...n ] ]  
<table_source> ::=  
{
        table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ]  
        [ WITH ( < table_hint > [ [ , ]...n ] ) ]  
    | rowset_function [ [ AS ] table_alias ]  
        [ ( bulk_column_alias [ ,...n ] ) ]  
    | user_defined_function [ [ AS ] table_alias ]
    | OPENXML <openxml_clause>  
    | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]  
    | <joined_table>  
    | <pivoted_table>  
    | <unpivoted_table>  
}
<tablesample_clause> ::=  
    TABLESAMPLE [SYSTEM] ( sample_number [ PERCENT | ROWS ] )  
        [ REPEATABLE ( repeat_seed ) ]  
 
<joined_table> ::=  
{
    <table_source> <join_type> <table_source> ON <search_condition>  
    | <table_source> CROSS JOIN <table_source>  
    | left_table_source { CROSS | OUTER } APPLY right_table_source  
    | [ ( ] <joined_table> [ ) ]  
}
<join_type> ::=  
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN
 
<pivoted_table> ::=
        table_source PIVOT <pivot_clause> table_alias
 
<pivot_clause> ::=
        ( aggregate_function ( value_column )  
        FOR pivot_column  
        IN ( <column_list> )  
    )  
 
<unpivoted_table> ::=
        table_source UNPIVOT <unpivot_clause> table_alias
 
<unpivot_clause> ::=
        ( value_column FOR pivot_column IN ( <column_list> ) )  
 
<column_list> ::=
          column_name [ ,...n ]
 
 
 
[ WHERE <search_condition> ]
 
 
 
< search_condition > ::=  
    { [ NOT ] <predicate> | ( <search_condition> ) }  
    [ { AND | OR } [ NOT ] { <predicate> | ( <search_condition> ) } ]  
[ ,...n ]  
<predicate> ::=  
    { expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } expression  
    | string_expression [ NOT ] LIKE string_expression  
  [ ESCAPE 'escape_character' ]  
    | expression [ NOT ] BETWEEN expression AND expression  
    | expression IS [ NOT ] NULL  
    | CONTAINS  
    ( { column | * } , '< contains_search_condition >' )  
    | FREETEXT ( { column | * } , 'freetext_string' )  
    | expression [ NOT ] IN ( subquery | expression [ ,...n ] )  
    | expression { = | < > | ! = | > | > = | ! > | < | < = | ! < }  
  { ALL | SOME | ANY} ( subquery )  
    | EXISTS ( subquery )     }  


 
Là, t'as un truc MEGA basic. T'as même pas de ORDER BY, de GROUP BY, de HAVING, de WITH, de INTO, etc.
 
Have fun


Message édité par MagicBuzz le 16-11-2006 à 22:10:28
n°1476875
FlorentG
Unité de Masse
Posté le 16-11-2006 à 22:25:48  profilanswer
 

MagicBuzz, si tu passes dans la région, j'te paye une bière [:dawak]

n°1476880
MagicBuzz
Posté le 16-11-2006 à 22:35:12  profilanswer
 

Une seule ? Bon, OK pour un formidable, sinon rien :o
 
T'habites où ? :D


Message édité par MagicBuzz le 16-11-2006 à 22:35:23
n°1476881
FlorentG
Unité de Masse
Posté le 16-11-2006 à 22:36:29  profilanswer
 

Pas loin de strasbourg

n°1476884
MagicBuzz
Posté le 16-11-2006 à 22:46:25  profilanswer
 

En plus y doit y avoir de la bonne bière :bounce:

n°1476979
paf27
Paf Was Here !!!
Posté le 17-11-2006 à 09:12:22  profilanswer
 

Ca a l'air pas mal tout ça, je vais dépioter à tête reposé
 
Merci


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

  Déclaration de requête SQL en XML

 

Sujets relatifs
Lire un XML (tag spécifique) avec javaformat d'entier via SQL
Aide pour module TV stream, ajouté une fonction SQL en plus.JDBC, déclaration dynamique des requête SQL ?
[resolu] Probleme de requete sur deux tablesRequête SQL et gestion des dates
SQL - requête sur nom de variable générée de façon dynamique 
Plus de sujets relatifs à : Déclaration de requête SQL en XML


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