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

SQL Oracle Discussion :

Requête qui n'en finit plus


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut Requête qui n'en finit plus
    Je cherche a optimiser ce petit script sql qui ne finit plus. La table contient environ 2 400 000 lignes. Le ficher résultant devait avoir un peu plus de 2 000 000 de ligne (avec les regroupements)

    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
    SET FEEDBACK OFF
    SET HEADING OFF
    SET PAGESIZE 0
    SET VERIFY OFF
    SET TIMING OFF
    SET TRIMOUT ON
    SET TRIMSPOOL ON
    SET LINESIZE 32000
    SET LONG 32000
    SET LONGCHUNKSIZE 30000
    set recsep off
    COL ligne FORMAT A32000
    set termout off
    SET ECHO OFF
     
    WHENEVER SQLERROR EXIT SQL.SQLCODE
    WHENEVER OSERROR EXIT OSCODE
     
    spool $HQ_TMPPATH/gp58u_sm_cirelationship.csv
     
    alter session set nls_sort='BINARY';
    alter session set nls_comp='BINARY';
     
    select '"RELATIONSHIP_SUBTYPE","RELATIONSHIP_TYPE","OUTAGE_DEPENDENCY","OUTAGE_THRESHOLD","RELATIONSHIP_NAME","LOGICAL_NAME","DATASOURCE","RELATED_CIS"' from dual;
     
    SELECT    '"' || RELATIONSHIP_SUBTYPE
              ||'","' || RELATIONSHIP_TYPE
              ||'","' || OUTAGE_DEPENDENCY
              ||'","' || OUTAGE_THRESHOLD
              ||'","' || RELATIONSHIP_NAME
              ||'","' || LOGICAL_NAME
              ||'","' || DATASOURCE
              ||'","' || rtrim(xmlagg(xmlelement(e,RELATED_CIS,CHR(13) ||  CHR(10)).extract('//text()') order by rowid).GetClobVal(),CHR(13) ||  CHR(10) )
    ||'"' AS LIGNE
    FROM OUTIL.XCOM_CIRELATION
    GROUP BY RELATIONSHIP_SUBTYPE, RELATIONSHIP_TYPE, OUTAGE_DEPENDENCY, OUTAGE_THRESHOLD, RELATIONSHIP_NAME, LOGICAL_NAME, DATASOURCE
    ORDER BY RELATIONSHIP_NAME || '!' || LOGICAL_NAME || '!'  ;
     
    spool off
     
    quit

  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 : 47
    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
    En 11gR2 vous avez la fonction LISTAGG qui fait l’agrégat de texte :
    http://docs.oracle.com/database/121/...nctions100.htm

    Elle sera peut-être moins coûteuse que l'astuce XML.

    Aussi une petite astuce avec SQL Developer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select /*csv*/ dummy, sysdate, 'CONSTANTE' as cst
      from dual;
     
    "DUMMY","SYSDATE","CST"
    "X",2015-08-12 15:24:05,"CONSTANTE"

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Par défaut
    Ma requête précédente utilisait le LISTAGG mais lors de la concaténation, j'ai des enregistrements avec plus de 4000 caractères donc ça ne fonctionnait pas.

  4. #4
    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 : 47
    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
    Vu votre requête, il n'y a pas tellement de piste d'optimisation possible.
    Votre serveur a-t-il plusieurs CPU ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from v$license;

Discussions similaires

  1. Somme cumulative qui n'en finit plus
    Par aerf29 dans le forum Webi
    Réponses: 4
    Dernier message: 21/05/2014, 14h12
  2. (UNION) Requete qui ne fonctionne plus avec mysql4
    Par kreatik dans le forum Requêtes
    Réponses: 0
    Dernier message: 13/11/2007, 13h31
  3. [MySQL] Comprend pas! requete qui ne modifie plus la base au bout d'un certain nombre d'essai
    Par maxfive7 dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 01/08/2007, 14h05
  4. Requete qui fontionne plus sous MySQL 4.0
    Par Gamleur84 dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/08/2006, 15h08
  5. requete qui marche, puis qui marche plus, puis qui marche ..
    Par exyacc dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/04/2006, 19h32

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