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 :

Souci sur requêtes : PK autoincrémentées


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Par défaut Souci sur requêtes : PK autoincrémentées
    Bonjour tous,

    J'ai un souci dont je ne sais comment le résoudre:

    J'ai 2 tables contenant des données :
    S1 (PK1, PERSONNE, AA)
    S2 (PK2, FK1, VOITURE, AB) FK1=FK(S1.PK1)

    Et 3 tables de destination vides que je souhaite alimenter :
    D1 (autoincrémental_PK1, PERSONNE, AA)
    D2 (autoincrémental_PK2, VOITURE, AB)
    D3 (ID_1, ID_2) ID_1=FK(D1.autoincrémental_PK1) et ID_2=FK(D2.autoincrémental_PK2)

    Ces PK autoincrémentées m'ennuient, je ne sais pas comment écrire les requêtes INSERT pour que cela soit fait dans la même transaction.

    - utiliser la séquence des PK autoincrémentées? (moche je pense)
    - utiliser la clause RETURNING?

    Quel approcher auriez-vous ?

    Amicalement,
    Linda.

    Ah oui: je suis en Oracle 9i.
    Là je lis la doc sur le returning bulk, mais je n'obtiens pas de résultat et je ne sais pas si c'est le bon principe.
    http://docs.oracle.com/cd/E11882_01/...nto_clause.htm

  2. #2
    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
    Multi table insert à partir de la jointure entre les deux tables source, utilisant les deux sequences

  3. #3
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Par défaut
    Ok grand mnitu,

    j'oublie la clause returning.
    => Je vais tenter l'insertion de données depuis la séquence.

    La gestion des delete se ferait par "delete cascade" ?

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Par défaut J'en suis la
    J'essaye ça:

    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
    INSERT ALL
    INTO /*+ append */ D1
    (PERSONNE,AA)
    VALUES(PERSONNE,AA)
     
    INTO /*+ append */ D2
    (VOITURE,AB)
    VALUES(VOITURE,AB)
     
    RETURNING 
    (autoincrémental_PK1
    ,autoincrémental_PK2)
    INTO /*+ append */ D3
    (ID_1, ID_2)
     
    from
    (
    select
    S1.PERSONNE
    ,S1.AA
    ,S2.VOITURE
    ,S2.AB
    from S1
    JOIN S2 ON S1.PK1=S2.FK1
    );
    => Avez vous un avis? Est-ce pertinent ?
    Merci d'avance

  5. #5
    Membre éprouvé
    Inscrit en
    Septembre 2010
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 82
    Par défaut
    Salut linda,

    Est-ce que tu pourrais nous mettre un petit exemple de ce que tu essayes de faire avec un CREATE TABLE et quelques données de tests ? Parce qu'honnêtement, j'ai rien compris.

    Aussi, fais attention aux HINT /+ append */. Déjà, ce n'est pas à cet endroit qu'il faut les mettre mais JUSTE APRES le mot INSERT et non pas dans le INTO. Ensuite, tu dois savoir que ceci pousse Oracle a insérer tes données à la "fin" de ta table et allouera un nouvel espace même s'il y a de l'espace libérée par d'autres données. Donc ta table grandira encore en encore...

  6. #6
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Novembre 2012
    Messages : 7
    Par défaut
    Hello Amir,

    Et bien je veux alimenter des table D1,D2 et D3 qui sont vidées à chaque fois.
    Il s'agit d'une synchronisation journalière)
    Et les données sont dans 2 tables sources S1 et S2.

    Sinon Ok je vais éviter le hint append, je ne vois pas dans la doc du INSERT ALL ou le placer.

    Pour un exemple:
    disons que je veut passer d'un MDD de 2 tables qui indiquent qu'une personne a 1,n voitures"
    à un MDD qui indique la meme chose mais via une table de correspondance.

    C'est surtout le RETURNING que je maitrise pas... j'espere qu'il est toléré dans l'INSERT ALL.
    => Je trouve pas la doc qui indique cela dans oracle.

    Merci de tes conseils déjà.

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Par défaut
    Citation Envoyé par amir. Voir le message
    Salut linda,

    Est-ce que tu pourrais nous mettre un petit exemple de ce que tu essayes de faire avec un CREATE TABLE et quelques données de tests ? Parce qu'honnêtement, j'ai rien compris.

    Aussi, fais attention aux HINT /+ append */. Déjà, ce n'est pas à cet endroit qu'il faut les mettre mais JUSTE APRES le mot INSERT et non pas dans le INTO. Ensuite, tu dois savoir que ceci pousse Oracle a insérer tes données à la "fin" de ta table et allouera un nouvel espace même s'il y a de l'espace libérée par d'autres données. Donc ta table grandira encore en encore...
    J'ajouterai en ce qui concerne le hint /*+ append */ pour complément d'information.

    1. Il ne fonctionne pas avec insert/values
    2. en 11g il peut fonctionner avec insert/values mais en utilisant /*+ append_values */
    3. il sera silencieusement ignoré lorsque la table cible contient un trigger
    4. il sera silencieusement ignoré lorsque la table cible contient une contrainte d'intégrité


    que ceci pousse Oracle a insérer tes données à la "fin" de ta table
    Ce n'est pas à la "fin" de la table mais au dessus du "High Water Mark".

    C'est pour cela que l'insertion en "direct path" n'est pas conseillée sur une table qui va subir des suppressions après l'insert.

Discussions similaires

  1. soucis sur requête
    Par olivxii dans le forum Langage
    Réponses: 1
    Dernier message: 16/04/2015, 23h58
  2. [MySQL] souci sur une requête
    Par Evelyne31 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 24/10/2012, 22h43
  3. Soucis sur une requête sql
    Par tryan dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2010, 21h10
  4. Petit souci sur requête mysql
    Par Kisa-chan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/02/2009, 21h07
  5. Besoin d'aide sur requête croisée
    Par keawee dans le forum Access
    Réponses: 7
    Dernier message: 18/11/2004, 09h46

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