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 :

Table externe et clé primaire


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Par défaut Table externe et clé primaire
    Bonjour, nous réalisons un appli sous powerbuilder avec une base Oracle.

    Dans le cadre d'un projet, nous devons travailler sur un fichier des plus de 100 000 ligne jusqu'à 1 000 000 et plus.

    Mon fichier se présente sous la forme suivante :
    1.2 Monsieur Toto
    4.3 15 rue du truc
    4.4 Mon code postal
    4.5 Ma ville
    1.2 Madame Tata
    4.3 27 route du machin
    4.4 Mon code postal
    4.5 Ma ville

    Ne pouvant attaquer ma table externe a travers mon appli PB, nous avons fait une table temporaire via un create into, mais le problème c'est que mes lignes ne sont plus dans le bon ordre.

    Merci de votre aide

  2. #2
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Bonjour,

    Citation Envoyé par chouchouilloux Voir le message
    Ne pouvant attaquer ma table externe a travers mon appli PB, nous avons fait une table temporaire via un create into, mais le problème c'est que mes lignes ne sont plus dans le bon ordre
    Qu'est-ce qu'on entend exactement par le terme l'ordre dans le context de ce problème? A moins que vous ne parliez d'une Indexed Organized Table, il n'y a pas d'ordre dans une table oracle (Heap Organized Table).

    Vous parlez des numéros qui sont présents dans la première colonne de l'extrait du fichier que vous avez présenté ci-dessus? Je ne vois pas d'ordre particulier.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Par défaut
    Bonjour,

    Le fichier est une extraction d'une base et qui représente des fiches.

    L'ordre du fichier txt est bien respecté ligne par ligne dans ma table externe.

    LIGNE 1 - FICHE 1 : 1.2 Monsieur Toto
    LIGNE 2 - FICHE 1 : 4.3 15 rue du truc
    LIGNE 3 - FICHE 1 : 4.4 Mon code postal
    LIGNE 4 - FICHE 1 : 4.5 Ma ville
    LIGNE 5 - FICHE 2 : 1.2 Madame Tata
    LIGNE 6 - FICHE 2 : 4.3 27 route du machin
    LIGNE 7 - FICHE 2 : 4.4 Mon code postal
    LIGNE 8 - FICHE 2 : 4.5 Ma ville

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Comme la structure du votre fichier est hétérogène vous devez au moment de chargement de la table de travail remettre chaque information à sa place Nom, Adresse, Code Postal, Ville comme pour les requêtes de type pivot
    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
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2    Select '1.2 Monsieur Toto' val from dual union all
      3    Select '4.3 15 rue du truc' val from dual union all
      4    Select '4.4 Mon code postal' val from dual union all
      5    Select '4.5 Ma ville' val from dual union all
      6    Select '1.2 Madame Tata' val from dual union all
      7    Select '4.3 27 route du machin' val from dual union all
      8    Select '4.4 Mon code postal' val from dual union all
      9    Select '4.5 Ma ville' val from dual
     10  )
     11  Select Trunc(RowNum/5) grp,
     12         Max(Case Mod(RowNum,4)
     13           When 1 Then val
     14         End) Nom,
     15         Max(Case Mod(RowNum,4)
     16           When 2 Then val
     17         End) Adresse,
     18         Max(Case Mod(RowNum,4)
     19           When 3 Then val
     20         End) CodePostal,
     21         Max(Case Mod(RowNum,4)
     22           When 0 Then val
     23         End) Ville
     24   From data
     25  Group By Trunc(RowNum/5)
     26  /
     
           GRP NOM                    ADRESSE                CODEPOSTAL             VILLE
    ---------- ---------------------- ---------------------- ---------------------- ----------------------
             1 1.2 Madame Tata        4.3 27 route du machin 4.4 Mon code postal    4.5 Ma ville
             0 1.2 Monsieur Toto      4.3 15 rue du truc     4.4 Mon code postal    4.5 Ma ville
     
    SQL>

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 161
    Par défaut
    Après je peux très bien avoir des trou, ne pas avoir la ligne code postal.

    Je vais regarder de ce coté.

    Merci

  6. #6
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    En outre, si au lieu d'un GLOBAL TEMPORARY TABLE on utilise une table ordinaire et donc on part sur le principe que l'alimentation de la table en question ne se fait pas dans un environnement multi-utilisateur, alors vous pouvez utiliser SQL*Loader afin d'injecter le contenu du fichier. L'avantage c'est qu'il existe un paramètre recnum qui indique le n° de ligne dans le fichier. On peut donc ajouter une nouvelle colonne qui sera alimentée par les valeurs renvoyées par recnum. Après dans les SELECT il faut faire un ORDER BY <cette colonne> ASC pour avoir le bon ordre.

    http://docs.oracle.com/cd/B28359_01/...field_list.htm
    Use the RECNUM parameter after a column name to set that column to the number of the logical record from which that record was loaded. Records are counted sequentially from the beginning of the first datafile, starting with record 1. RECNUM is incremented as each logical record is assembled. Thus it increments for records that are discarded, skipped, rejected, or loaded. If you use the option SKIP=10, the first record loaded has a RECNUM of 11.
    Voici un exemple, supposons que j'ai une table qui contient le nom des pays qui censé être limentée par SQL*Loader à partir d'un fichier plat où dans chaque ligne on a écrit le nom d'un pays.

    Je crée donc la table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE countries(country VARCHAR2(30) NOT NULL, recordNum NUMBER NOT NULL);
    Mon fichier text intitulé: "countries.txt":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Iran,
    Iraq,
    Belgique,
    France,
    Royaume-Uni,
    Etats-Unis
    Allemagne,
    Pologne,
    Espagne,
    Mon fichier de contrôle sql*loader intitulé "myscript.ctl"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    load data
    infile './countries.txt'
    into table countries
    fields terminated by ","
    (
        country             ,
        recordNum   recnum
    )
    En me mettant dans le répertoire qui contient les fichier de contrôle ainsi que le fichier de données (ce n'est pas une obligation mais à ce moment-là il faut spécifier le chemin complet vers les fichiers), je lance SQL*Loader afin d'alimenter ma table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sqlldr monUser/monPassword@ChaineConnexionTNS control=./myscript.ctl log=./log bad=./bad
    Et je vérifie que les données sont dans la table et en faisant un ORDER BY sur la colonne recordNum, je les obtiens exactement selon l'ordre des éléments dans le fichier original

    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
    SQL> SELECT t1.country FROM countries t1 ORDER BY t1.recordNum ASC;
     
    COUNTRY
    ------------------------------
    Iran
    Iraq
    Belgique
    France
    Royaume-Uni
    Etats-Unis
    Allemagne
    Pologne
    Espagne
     
    9 rows selected.
     
    SQL>

Discussions similaires

  1. Clés primaires sur des tables externes, alternatives par procédures stockées ?
    Par Jean-Philippe André dans le forum Développement
    Réponses: 18
    Dernier message: 10/07/2012, 17h21
  2. Import data d'Excel ds 2 table lié par clé primaire
    Par lord_paco dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 10/05/2005, 09h31
  3. [ORACLE 9i] Tables externes
    Par sygale dans le forum Oracle
    Réponses: 3
    Dernier message: 22/12/2004, 15h24
  4. [ORACLE 9i] tables externes et Skip column
    Par sygale dans le forum SQL
    Réponses: 7
    Dernier message: 17/11/2004, 05h13
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

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