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

Oracle Discussion :

external tables et number external !


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut external tables et number external !
    Bonjour à tous,

    Ce post fait suite à mon précédent concernant les external tables. Dans mon fichier csv à mettre dans une table externe, j'ai des number(12,2). J'ai vu de nombreux exemples de définition de tables mais aucune avec des colonnes de ce format. Est-ce possible ?
    J'ai bien vu exemple avec des float(126) du genre :

    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
     
    CREATE TABLE skip_tab (
    fiscal_year        NUMBER(4),
    prod_no            VARCHAR2(30),
    cost_per_unit      FLOAT(126),
    gross_rev_per_unit FLOAT(126))
    ORGANIZATION EXTERNAL (
    TYPE oracle_loader
    DEFAULT DIRECTORY ctemp
    ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    SKIP 1
    FIELDS TERMINATED BY X'09'
    MISSING FIELD VALUES ARE NULL
    (fiscal_year INTEGER EXTERNAL (4), prod_no CHAR(30),
    cost_per_unit FLOAT EXTERNAL, gross_rev_per_unit FLOAT EXTERNAL))
    LOCATION ('cost.txt'));
    Ce serait possible de substituer le float(126) par un NUMBER(12,2), et après mettre (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cost_per_unit FLOAT NUMBER(12,2)
    ou quelque chose d'approchant.

    Faut-il définir le caractère de séparateur décimal (',' ou '.') ? (dans mon fichier csv j'ai des valeurs du style 1235.78)

    Voili, voila.

    Et je n'ai pas trouvé un cours exhaustif sur les external tables sur le net, vous auriez une suggestion ?

    Cordialement.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    y a personne pour m'aider ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 155
    Par défaut
    Bon alors ça semble être faisable mais ça a l'air très compliqué, j'ai fait des tentatives du genre :


    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
     
     
     
     
     
    CREATE TABLE skip_tab (
    fiscal_year        NUMBER(4),
    prod_no            VARCHAR2(30),
    cost_per_unit    NUMBER(12,2),
    gross_rev_per_unit NUMBER(12,2))
    ORGANIZATION EXTERNAL (
    TYPE oracle_loader
    DEFAULT DIRECTORY ctemp
    ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    SKIP 1
    FIELDS TERMINATED BY X'09'
    MISSING FIELD VALUES ARE NULL
    (fiscal_year, prod_no,
    cost_per_unit terminated by ';'
    "TO_NUMBER(:fiscal_year, '-9999999999.99')", gross_rev_per_unit  terminated by ';'
    "TO_NUMBER(:gross_rev_per_unit, '-9999999999.99')"))
    LOCATION ('cost.txt'));
    Faut peut-être remplacer ';' par son code ascii hexa (X'nn').

    Mais bon ça fonctionne pas, il n'y a peut-être pas grand chose à changer pour que ça fonctionne.

    Donc une solution qui fonctionne est de remplacer les formats numériques zarbi (avec '.', '-', ...) par du varchar2, et modifier les traitements derrière pour que ça fonctionne (convertir les varchar2 en number).

    Bon si vous réussissez à me faire rentrer des NUMBER(n, m) dans des external tables ...

    Sinon niveau perfs c'est pas terrible.
    J'ai oracle 10g avec des tables sans index. J'ai vu qu'il y avait des limitations de taille des fichiers à charger dans les versions antérieures d'oracle (20Go ?), mais bon là j'ai ce comparatif :
    Pour 4 fichiers de 47Ko, 1869Ko, 2560Ko et 27300Ko en entrée,
    - avec tables oracle classique (chargées par sqlloader): 35 min de traitement
    - avec des external tables : 7h 25 min

    Faudra que je refasse le test.

    Cordialement

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2009, 15h13
  2. creation de table dans base externe
    Par pied9 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 06/06/2009, 17h38
  3. Réponses: 3
    Dernier message: 10/10/2007, 13h29
  4. Liés des tables de données externes via VBA..
    Par Fritzoune dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 11h08
  5. Pb de jointure externe avec un number
    Par mch_27 dans le forum Oracle
    Réponses: 2
    Dernier message: 07/03/2006, 15h33

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