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

Langage SQL Discussion :

sql properties ou xml


Sujet :

Langage SQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut sql properties ou xml
    Bonjour,

    Actuellement, je suis sur un projet où il y a plusieurs batchs. Tous ces batchs respectent la même structure de projet.

    Ces batchs utilisent des requêtes SQL depuis des fichiers .properties.

    Actuellement, je suis entrain de mettre en place un batch de purge. Mais j'ai des requêtes très longues (en nombre de lignes). Par souci de visibilité, j'ai placé certaines requêtes longues dans un fichier .sql que je charge lors de mon batch.

    Or, on m'a dit que cela n'était pas forcement "PRO" de mettre des fichiers sql dans un jar (le batch) et qu'il serait mieux de les mettre dans un fichier xml afin de pouvoir respecter l'homogénéité des requêtes, c'est à dire ne pas avoir des requêtes dans des fichiers properties et d'autres dans des fichiers xml (ou sql).

    De toute façon, je n'utiliserai pas les properties, vu que j'ai des requêtes assez longues,et donc en terme de maintenance, avoir une ligne qui fait 400 caractères (c'est pas top ) !

    Qu'en pensez-vous ? .sql ou .xml ?

    Et peut être que vous pourriez répondre à cette question si vous répondez à celle-ci !

    Mon batch est un programme JAVA, étant donné que j'exécute des requêtes SQL, (je ne manipule aucune donnée à part insérer des paramètres à ces scripts SQL).

    Est-il plus efficace de lancer un script SQL qui s'occupe de tous les traitements. Par exemple :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    DECLARE
      lvl INT;
      nb INT;
    BEGIN
      lvl := 0;
     
      INSERT INTO TABLE_HIERARCHIQUE (OPE_ID_FILS,OPE_ID_PERE,OPE_ID_LEVEL) (
        SELECT
          operation.ope_id,
          operation.ope_id_precedente,
          lvl
        FROM
         operation INNER JOIN type_operation
          ON operation.typ_top_id = type_operation.top_id
         LEFT OUTER JOIN apurement_incident_caisse
          ON operation.OPE_ID = apurement_incident_caisse.OPE_ID
         LEFT OUTER JOIN apurement_incident_atelier
          ON operation.OPE_ID = apurement_incident_atelier.OPE_ID
         LEFT OUTER JOIN incident_atelier_reception
          ON apurement_incident_atelier.OPE_ID_IAR = incident_atelier_reception.OPE_ID
         LEFT OUTER JOIN incident_caisse_reception
          ON apurement_incident_caisse.OPE_ID_ICR = incident_caisse_reception.OPE_ID
        WHERE
         operation.ope_date_operation > '01/01/2008'
         AND (operation.ope_num_operation <> operation.ope_code_regroupement
          OR ope_statut IN ('Annulé','Supprimé'))
         AND (TOP_IDENTIFIANT NOT IN ('INCCAEXD','INCCAEXE','INCATBED','INCATBEE'))
         AND ((incident_caisse_reception.ICR_MT_RESTANT_APURER IS NULL AND incident_atelier_reception.IAR_MT_RESTANT_APURER IS NULL)
          OR incident_caisse_reception.ICR_MT_RESTANT_APURER = 0
          OR incident_atelier_reception.IAR_MT_RESTANT_APURER = 0
         )
        );
     
        LOOP
     
          INSERT INTO TABLE_HIERARCHIQUE (OPE_ID_FILS,OPE_ID_PERE,OPE_ID_LEVEL) (
            SELECT
              operation.ope_id,
              operation.ope_id_precedente,
              lvl+1
            FROM
              TABLE_HIERARCHIQUE INNER JOIN operation
                ON TABLE_HIERARCHIQUE.OPE_ID_PERE = operation.ope_id
                AND TABLE_HIERARCHIQUE.OPE_ID_LEVEL = lvl
          );
     
          nb := SQL%ROWCOUNT;
     
          IF nb = 0 THEN
            EXIT;
          END IF;
     
          lvl := lvl + 1;
     
        END LOOP;
       INSERT INTO EXTR_ID_ARC_PUR (EXTR_ID,OPE_ID,ID_FONC,SES_ID) (SELECT S_EXTR_ID_ARC_PUR.NEXTVAL,OPERATION.OPE_ID, OPERATION.OPE_NUM_OPERATION, 5000 FROM OPERATION INNER JOIN TABLE_HIERARCHIQUE ON OPERATION.OPE_ID = TABLE_HIERARCHIQUE.OPE_ID_FILS);
    END;
    ou exécuter chacune des requêtes en Java, et donc boucler dans un for en Java etc.....

    Ma réponse serait d'exécuter un script SQL, et ainsi éviter de faire aller/retour Java-SGBD ?

    Supposons que d'exécuter le script SQL serait mieux, je pourrai tout de même récupérer ma requête par un fichier XML et lui balancer mes paramètres et lancer le script SQL. ça change rien au problème !

    La seule chose est qu'il faut avoir une double compétence Java et PL/SQL en cas d'exécution du gros bloc PL/SQL ci-dessus.
    Alors que si on exécute et traitement les requêtes côté Java, pas besoin de compétence PL/SQL. Mais bon, ce critère là ne me semble pas justifié vu la simplicité du code PL/SQL!

    Bon en gros, quelle est votre avis sur ces deux questions ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    La bonne méthode n'est ni fichier .sql ni fichier .xml.

    Mettez votre code SQL dans une procédure stockée en PL/SQL, que vous appellerez depuis votre code Java.
    Si vous avez beaucoup de procédures vous pouvez les rassembler dans un package qui devient un livrable de votre projet.

    Dès lors que vous travaillez avec une base de données, ce n'est pas choquant de demander des compétences sur ladite base.

    Hors sujet : vous êtes faché avec le forum Oracle ? Vous postez presque toujours dans "Langage SQL" qui a pour but l'écriture de requête suivant les normes en vigueur, là on n'y est pas du tout !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    j'aurai aimé les procédures stockées ! mais c'est interdit ici chez le client !

    En fait, pour les properties, j'ai réussi à mettre les requêtes sur plusieurs lignes en rajoutant un \ à la fin de chaque ligne

  4. #4
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Même remarque que Waldar ...

    Or, on m'a dit que cela n'était pas forcement "PRO" de mettre des fichiers sql dans un jar (le batch) et qu'il serait mieux de les mettre dans un fichier xml afin de pouvoir respecter l'homogénéité des requêtes, c'est à dire ne pas avoir des requêtes dans des fichiers properties et d'autres dans des fichiers xml (ou sql).
    Dans tous les cas à chaque fois que vous changez une requête vous allez devoir sûrement recréer votre jar il me semble ?

    ++

Discussions similaires

  1. [T-SQL]Select for XML hierarchique
    Par jarod_bx dans le forum Adaptive Server Enterprise
    Réponses: 1
    Dernier message: 11/12/2007, 18h02
  2. [PL/SQL] Generer du XML
    Par squalito dans le forum Oracle
    Réponses: 6
    Dernier message: 19/07/2006, 18h14
  3. SQL*Loader avec xml
    Par dknet dans le forum SQL
    Réponses: 1
    Dernier message: 26/06/2006, 17h49
  4. [Design] Requete SQL ou Caching XML ?
    Par brousaille dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/04/2006, 17h10
  5. Type "Bit" SQL server en XML lors d'une XMLInstruc
    Par mchicoix dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/02/2006, 16h44

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