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

PL/SQL Oracle Discussion :

UTL_FILE avec requête conséquente


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut UTL_FILE avec requête conséquente
    Bonjour,

    je dois faire une extraction assez complexe (j'ai une 15aine de jointures) et injecter ces données dans un fichier CSV converti en UTF sans BOM.
    cette requête qui tourne en moyenne entre 30 mn et 1 Heure (sic ! eh ! oui les serveurs sont anciens et on requête sur la base de production !) et doit ramener entre 250 000 et 450 000 lignes

    j'ai regardé chez mon ami google, mais les scripts que j'ai vu utilsant le package UTL_FILE sont au mieux pour extraire une table.
    et je connais fort peu pl/sql

    Ma question : est-ce que PL/SQL et ce package sont adaptés ?
    sinon, quelle piste pour cette automatisation ?

    Question subsidiaire, je dois de plus insérer un champ fixe en début de fichier, quelle serait la syntaxe ?

    merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pour moi le plus simple c'est spool dans sqlplus.
    Question subsidiaire, je dois de plus insérer un champ fixe en début de fichier, quelle serait la syntaxe ?
    Rajoute la constante dans le select.

  3. #3
    Nouveau membre du Club Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour skuatamad,

    je te remercie, je vais regarder ça de plus près.

    bonne journée,

  4. #4
    Nouveau membre du Club Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    bonjour,

    si je fait un select Z, entete1, entete2 from etc.

    la constante Z va se retrouver sur chacune des lignes retournée.

    or j'aurais besoin d'avoir un fichier en sortie du style

    Z
    entete1|entete2
    val1|val2
    etc.
    est-ce possible en sql ?

    merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Tu pourras faire de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Z || CHR(13) || CHR(10) || entete1 || '|' || entete2 || CHR(13) || CHR(10) || val1 '|' val2 FROM ...
    Le code "CHR(13) + CHR(10)" te permettra d'effectuer un saut de ligne

  6. #6
    Nouveau membre du Club Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    @ skuatamad,

    j'ai essayé la syntaxe, mais ça ne fonctionne pas
    je suis sous sql developer, peut-être est-ce lié ?

    ligne 3 : commande SQLPLUS ignorée : set linesize 1000
    ligne 4 : commande SQLPLUS ignorée : set pages 0
    ligne 4 : commande SQLPLUS ignorée : set emb ON
    ligne 4 : commande SQLPLUS ignorée : set newp none
    ligne 5 : commande SQLPLUS ignorée : set SQLPROMPT ''
    ligne 6 : commande SQLPLUS ignorée : set TRIMSPOOL ON
    ligne 7 : commande SQLPLUS ignorée : set COLSEP '|'
    ligne 8 : commande SQLPLUS ignorée : set HEADING ON
    ligne 9 : commande SQLPLUS ignorée : set RECSEP OFF
    ligne 10 : commande SQLPLUS ignorée : set HEADSEP OFF
    ligne 11 : commande SQLPLUS ignorée : set UNDERLINE OFF
    @ meng-tih

    j'ai défini des alias de colonnes dans mon select et je souhaiterais les récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT
     
    T_TITRECIVILITE.LIBELLE as CNT_TITLE,
      T_CLIENT.NOM as CNT_LASTNAME,
      T_CLIENT.PRENOM AS CNT_FIRSTNAME,
      TRUNC(T_CLIENT.DATE_NAISSANCE) AS CNT_BIRTHDATE,
    j'ai essayé bêtement de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT
    Z || chr(13) || chr(10),
    T_TITRECIVILITE.LIBELLE as CNT_TITLE,
      T_CLIENT.NOM as CNT_LASTNAME,
      T_CLIENT.PRENOM AS CNT_FIRSTNAME,
      TRUNC(T_CLIENT.DATE_NAISSANCE) AS CNT_BIRTHDATE,
    mais bien évidemment ça n'a pas fonctionné...

    Franck

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par GeekAlf Voir le message
    je suis sous sql developer, peut-être est-ce lié ?
    Oui j'avais bien précisé avec sqlplus (ligne de commande).
    Pour l'info à ajouter une fois avant le résultat de la requête, utilise prompt comme ci-dessous :
    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
    SET echo off
    SET feedback off
    SET linesize 1000
    SET pages 0 emb ON newp none
    SET sqlprompt ''
    SET trimspool ON
    SET COLSEP ';'
    SET HEADING ON
    SET RECSEP OFF
    SET HEADSEP ON
    SET underline off
    spool C:\resultats.csv
    prompt intro text;
    SELECT * FROM emp;
    spool off
    exit

  8. #8
    Nouveau membre du Club Avatar de GeekAlf
    Inscrit en
    Février 2011
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    @ skuatamad

    Super ça marche.

    merci beaucoup.

    en fait j'avais essayé en lançant un bat avec sqlplus, mais j'avais des retour chariot dans mon code, il n'aime pas...

    il me reste les 2 points suivant à caler :


    j'ai des blancs qui s'insèrent à droite des champs et entêtes, peut-être avec un rtrim... dans le select ou un set...[/LIST]

    Et bizarrement, il me tronque l'entete à la taille du champ !


    merci à tous !

Discussions similaires

  1. Résultat commençant par un chiffre avec requête SELECT
    Par nicolas.pissard dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/04/2010, 13h31
  2. insertion avec requête imbriquées
    Par Manfried dans le forum Requêtes
    Réponses: 7
    Dernier message: 19/11/2005, 09h51
  3. Réponses: 4
    Dernier message: 04/08/2005, 08h23
  4. [VB.NET] [ODBC] Récupérer des valeurs avec requête ODBC?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/03/2005, 16h38
  5. 3 tables avec requête complexe
    Par yamino dans le forum Langage SQL
    Réponses: 6
    Dernier message: 25/03/2004, 19h50

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