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 :

XML file - sqlldr et ou table externe - Table ORACLE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut XML file - sqlldr et ou table externe - Table ORACLE
    Bonjour à tous !
    A regarder ce qui est fait concernant la manipulation de données XML dans ORACLE , j'ai l'impression que c'est tous sauf simple ...
    Je suis en environnement Oracle 9i Sur HP/UX 11

    J'ai la table ORACLE suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    desc distrib
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     DISTRIB_ID                                         NUMBER(4)
     DISTRIB_NAME                                       VARCHAR2(32)
     DISTRIB_PARAM                                      VARCHAR2(100)
    J'ai le fichier XML suivant
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>                
    <message status="complete">
    <distrib>
        <distrib_id>0001</distrib_id>
        <distrib_name>nom distrib 1</distrib_name>
        <distrib_param>parametre A</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0002</distrib_id>
        <distrib_name>nom distrib 2</distrib_name>
        <distrib_param>parametre B</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0003</distrib_id>
        <distrib_name>nom distrib 3</distrib_name>
        <distrib_param>parametre C</distrib_param>
    </distrib>
     
    <distrib>
        <distrib_id>0004</distrib_id>
        <distrib_name>nom distrib 4</distrib_name>
        <distrib_param>parametre D</distrib_param>
    </distrib>
    </message>
    La vous m'avez compris !! comment charger les données du fichiers XML dans la table DISTRIB ?

    Est il possible via une table externe ORACLE de voir les données du fichier XML comme le contenu de la table distrib ?

    Un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from Ma_Table_Externe
    Qui me rend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DISTRIB_ID DISTRIB_NAME                     DISTRIB_PARAM
    ---------- -------------------------------- --------------------
             1 nom distrib 1                    Parametre A
             2 nom distrib 2                    Parametre B
     
    etc..etc
    Je ne voit pas comment configurer la table externe / ou le fichier de controle sqlldr pour avoir cela
    Merci de votre aide
    Cordialement
    @argoet

  2. #2
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    En modifiant legerement le .xml, place sous /usr/tmp, cela pourrait donner

    Inbound document:
    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
    <message STATUS="complete">
    <distrib>
        <distrib_id>0001</distrib_id>
        <distrib_name>nom distrib 1</distrib_name>
        <distrib_param>parametre A</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0002</distrib_id>
        <distrib_name>nom distrib 2</distrib_name>
        <distrib_param>parametre B</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0003</distrib_id>
        <distrib_name>nom distrib 3</distrib_name>
        <distrib_param>parametre C</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0004</distrib_id>
        <distrib_name>nom distrib 4</distrib_name>
        <distrib_param>parametre D</distrib_param>
    </distrib>
    </message>
    Execution Output:
    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
    Table dropped.
     
     
    Directory dropped.
     
     
    Table created.
     
     
    Directory created.
     
    Processing record 1
    Distrib Id   0001
    Distrib Name nom distrib 1
    Processing record 2
    Distrib Id   0002
    Distrib Name nom distrib 2
    Processing record 3
    Distrib Id   0003
    Distrib Name nom distrib 3
    Processing record 4
    Distrib Id   0004
    Distrib Name nom distrib 4
     
    PL/SQL procedure successfully completed.
     
     
    DISTRIB_ID DISTRIB_NAME    DISTRIB_PARAM
    ---------- --------------- ----------------------------------------
             1 nom distrib 1   parametre A
             2 nom distrib 2   parametre B
             3 nom distrib 3   parametre C
             4 nom distrib 4   parametre D
     
     
    Commit complete.
    Script:
    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
    DROP TABLE plx_distrib
    /
    DROP DIRECTORY plx_directory
    /
    CREATE TABLE plx_distrib
    (DISTRIB_ID      INTEGER
    ,DISTRIB_NAME    VARCHAR2(32)
    ,DISTRIB_PARAM   VARCHAR2(100)
    )
    /
    CREATE DIRECTORY plx_directory AS '/usr/tmp'
    /
     
    SET SERVEROUTPUT ON SIZE 1000000
     
    DECLARE
    l_record_counter      INTEGER;
    l_nested_counter      INTEGER;
    C_MAX_CUSTOMER        INTEGER := 100;
     
    BEGIN
    l_record_counter := 0;
     
    FOR j IN (SELECT extractValue(value(ct),'distrib/distrib_id')             Distrib_id
                    ,extractValue(value(ct),'distrib/distrib_name')           Distrib_name
                    ,extractValue(value(ct),'distrib/distrib_param')          Distrib_param
              FROM   TABLE(XMLSequence(extract(XMLTYPE(bfilename('PLX_DIRECTORY','distrib.xml'),nls_charset_id('AL32UTF8')),'/message/distrib'))) ct) LOOP
     
          l_record_counter := l_record_counter + 1;
     
          dbms_output.put_line('Processing record '||TO_CHAR(l_record_counter));
     
          dbms_output.put_line('Distrib Id   ' ||j.distrib_id);
          dbms_output.put_line('Distrib Name ' ||j.distrib_name);
     
          INSERT INTO plx_distrib
          (distrib_id
          ,distrib_name
          ,distrib_param)
          VALUES
          (j.distrib_id
          ,j.distrib_name
          ,j.distrib_param)
          ;
    END LOOP;
    END;
    /
     
    COL distrib_id    FOR 999
    COL distrib_name  FOR A15
    COL distrib_param FOR A40
     
    SELECT *
    FROM   plx_distrib
    /
    COMMIT
    /
    EXIT

  3. #3
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut
    Citation Envoyé par plabrevo
    En modifiant legerement le .xml, place sous /usr/tmp, cela pourrait donner .... + Code PL/SQL
    Je vous remercie , "plabrevo" , cependant ce n'est pas la réponse que j'atendais (c'est à quelques chose pres ce que je fait aujourd'hui) .

    PS : Votre syntaxe est en 10G (Je suis en 9i tel que précisé en début de post )

    Mon propos ce situe vraiement à la lecture du fichier via sqlldr et ou une table exetrne qui utilise le "loader" ORACLE

  4. #4
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut Un début de réponse

    C'est pas encore le top mais je pense que cela pourra aider
    prérequis : les 2 premieres lignes du fichier sont à supprimer
    l'ordre de présence des "<tag>" distrib_id , distrib_name , distrib_param dans le fichier doit toujours etre le meme
    Fichier EXT_DISTRIB.xml

    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
    <distrib>
        <distrib_id>0001</distrib_id>
        <distrib_name>nom distrib 1</distrib_name>
        <distrib_param>parametre A</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0002</distrib_id>
        <distrib_name>nom distrib 2</distrib_name>
        <distrib_param>parametre B</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0003</distrib_id>
        <distrib_name>nom distrib 3</distrib_name>
        <distrib_param>parametre C</distrib_param>
    </distrib>
    <distrib>
        <distrib_id>0004</distrib_id>
        <distrib_name>nom distrib 4</distrib_name>
        <distrib_param>parametre D</distrib_param>
    </distrib>
    Création de la table Externe , basé sur le fichier xml
    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 EXT_Distrib (
      Distrib_Id            varchar2(50),
      Distrib_Name          varchar2(50),
      Distrib_Param         varchar2(50)
    )
    Organization External
     (Type Oracle_Loader
      Default directory TMP_DIR
      ACCESS Parameters
          (
           Records Delimited by '</distrib>'
           Badfile TMP_DIR:'EXT_Distrib.bad'        
           logfile TMP_DIR:'EXT_Distrib.log'        
           fields (
                  Vide        char enclosed by "<distrib" and ">",
                  Distrib_Id  char enclosed by "<distrib_id>" and "</distrib_id>",
                  Distrib_Name char enclosed by "<distrib_name>" and "</distrib_name>",
                  Distrib_Param char enclosed by "<distrib_param>" and "</distrib_param>"
                  )
          )
      Location ('EXT_DISTRIB.xml')
     )
     reject limit unlimited;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select * from ext_distrib;
     
    DISTRIB_ID               DISTRIB_NAME             DISTRIB_PARAM
    -----  ----------------- ------------------------ ------------------------                                                      
    0001                     nom distrib 1            parametre A
    0002                     nom distrib 2            parametre B
    0003                     nom distrib 3            parametre C
    0004                     nom distrib 4            parametre D

Discussions similaires

  1. [WD17] Table dans table dans table je pense ?!
    Par franck34matlab dans le forum WinDev
    Réponses: 8
    Dernier message: 08/07/2014, 14h06
  2. table externe - file not found
    Par juin29 dans le forum Oracle
    Réponses: 9
    Dernier message: 07/12/2010, 11h52
  3. XML Files insert dans une table
    Par Nyny93 dans le forum Administration
    Réponses: 0
    Dernier message: 26/09/2007, 17h26
  4. [ORACLE 9i] Tables externes
    Par sygale dans le forum Oracle
    Réponses: 3
    Dernier message: 22/12/2004, 15h24
  5. [ORACLE 9i] tables externes et Skip column
    Par sygale dans le forum SQL
    Réponses: 7
    Dernier message: 17/11/2004, 05h13

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