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 :

déplacement de donnée


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut déplacement de donnée
    bonjour
    je vient de crée une base de donnée d'une bibliothèque
    la parti qui me cause problème dans cette base est la table que je nommais exemplaire et qui a été crée a l'aide de la commande sql :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table exemplaire(
    numinv number constraint exemplaire_pk primary key,
    dateachat date,
    etat varchar2(8),
    livre number constraint fk_exemplaire_livre references livre(code_livre)
    );

    après avoir remplis la table
    j'ai eux besoin de faire une transformation sur l'aspect général de la base
    j'ai voulu supprimer l'attribut etat et le mettre dans une table indépendante
    j'ai eux donc recoure a la commande sql permettant de faire une nouvelle table que j'ai nommé etat a l'aide de la commande :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table etat(
    id_etat number constraint primary key,
    Libelle_Etat varchar2(8),
    );
    ce qui me cause probléme ici c'est la constraint qui va gérer la relation entre la table exemplaire et la table etat mais aussi il faut un moyen impact de faire le transfert des données de l'attribut etat de la table exemplaire dans la nouvelle table sans risque de perte ou d'incohérence des données
    un transfert normal de donnée ca serais fait par la commande :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO etat (libelle_etat)
    SELECT DISTINCT etat
    FROM exemplaire;
    mais comment mettre la nouvelle table etat en relation correct avec la table exemplaire et s'assurer que j'ai bien remis les choses en ordre surtout que j'ai déja remplis la table exemplaire
    un transfert pas a pas des données va prendre beaucoup de temps
    es ce que quelqu'un pourrais me données une idée svp
    merci

  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
    Vous pouvez vous en sortir avec une séquence et en renommant puis recréant la table exemplaire.

    Il vaut mieux fermer votre application et/ou vos process le temps de passer le 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
    ALTER TABLE exemplaire
    DROP CONSTRAINT fk_exemplaire_livre;
     
    ALTER TABLE exemplaire
    DROP CONSTRAINT exemplaire_pk;
     
    ALTER TABLE exemplaire
    RENAME TO exemplaire_old;
     
    CREATE SEQUENCE seq_id_etat
    START WITH 1
    NOCYCLE;
     
    INSERT INTO etat (id_etat, libelle_etat)
    SELECT seq_id_etat.nextval, Etat
      FROM (SELECT DISTINCT etat FROM exemplaire_old);
     
    CREATE TABLE exemplaire
    (
      numinv number constraint exemplaire_pk PRIMARY KEY,
      dateachat date,
      etat_id number constraint fk_exemplaire_etat REFERENCES etat(etat_id),
      livre number constraint fk_exemplaire_livre REFERENCES livre (code_livre)
    );
     
    INSERT INTO exemplaire (numinv, dateachat, etat_id, livre)
    SELECT ex.numinv, ex.dateachat, et.etat_id, ex.livre
      FROM exemplaire_old ex
            INNER JOIN etat et
              ON et.libelle_etat = ex.etat;
     
    COMMIT;
     
    -- Après vérification :
    -- DROP TABLE exemplaire_old;

  3. #3
    Membre confirmé Avatar de restart
    Inscrit en
    Novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 84
    Par défaut
    ouais mais la un transfert de donnée va me demander tous ces manipulations (un renomage puit des insert puits renouvlage des constraints...)
    il n y a pas une méthode de faire un transfert direct des données en ajoutant, peut être, un index a la table exemplaire pour pouvoir référer les données lors du transfert
    en fete tu m'as pas encore dit comment je peut mettre les deux table exemplaire et etat en relation
    je veux dire la constraint de relation entre les deux tables exemplaire et etat
    merci

  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
    Toutes les réponses à vos questions sont dans le script.

    Si vous avez peur de trois alter et de deux insert, changez de métier !

  5. #5
    Membre expérimenté Avatar de mongilotti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2003
    Messages : 314
    Par défaut
    il n'ya plus a ajouter, courage pour le travail.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déplacement des données sous windows
    Par François Fontaine dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 01/07/2008, 16h50
  2. Déplacement de données dans la meme table
    Par tulipeverte dans le forum Requêtes
    Réponses: 13
    Dernier message: 06/03/2008, 18h15
  3. Déplacement de données
    Par thierrybatlle dans le forum Access
    Réponses: 7
    Dernier message: 20/03/2007, 15h42
  4. Déplacement de donné
    Par dirthangel dans le forum Langage
    Réponses: 13
    Dernier message: 29/07/2005, 03h04
  5. Déplacement de données mais dans scalaire
    Par siaoly dans le forum Langage
    Réponses: 1
    Dernier message: 27/07/2005, 00h30

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