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 :

Script Insert into select


Sujet :

SQL Oracle

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut Script Insert into select
    Bonjour à tous,

    Voici ma problématique pour un script d'insert (5 millions d'insert) en SQL

    je dispose
    - d'une table SEX composée de deux colonnes : HOMME, FEMME
    - une table PERSONNES, composée de deux colonnes : NOM, TYPE

    Mon objectif est d'insérer, pour chaque enregistrement de la table PERSONNES :
    - Si PERSONNES.TYPE = 'H' -> insérer PERSONNES.NOM dans SEX.HOMME
    - Si PERSONNES.TYPE = 'F' -> insérer PERSONNES.NOM dans SEX.FEMME

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Quelle drôle d'idée de modéliser ça comme ça

    A la limite fait une vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW SEX AS
    SELECT DECODE(TYPE,'H',NOM) HOMME, DECODE(TYPE,'F',NOM) FEMME
    FROM PERSONNES
    Mais j'vois mal comment exploiter un résultat du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ROBERT 
               SEVERINE
               MICHELINE
    MARTIN
    JEAN

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    Merci pour ta réponse orafrance,

    Je pense avoir mal exprimé mon problème...

    Je cherche en fait à inserer mes données à partir de deux select :

    - Select NOM from PERSONNES where type = 'H' : pour les hommes
    - Select NOM from PERSONNES where type = 'F' : pour les femmes

    Ainsi, pour peupler ma table SEX j'effectue deux fois un "insert into select"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into SEX (homme) select NOM from PERSONNES where type = 'H'
    ->pour les hommes
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into SEX (femme) select NOM from PERSONNES where type = 'F'
    -> pour les femmes

    au final j'obtient quelque chose du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Robert severine
    Martin micheline
    Jean
    le problème c'est que la colonne femme ne dois pas être nulle, du coup j'obtient une erreur oracle à l'exécution de la première requête. Est il possible d'effectuer les deux insert dans le même ordre en SQL. (PL/SQL sinon)

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Hein ?

    Et si tu as 100000 d'hommes et 0 femmes ?

    PS : Un insert insère 1 ligne. Si tu passes 2 inserts séparés ça insèrera 2 lignes
    Dans ton cas tu aura 1 ligne par homme et 1 ligne par femme.

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    surtout que d'un point de vue modélisation c'est n'importe quoi

    C'est pas plus simple de ne garder que la colonne TYPE et faire le select en conséquence ? C'est quoi l'intérêt au final ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Par défaut
    Hein ?

    Et si tu as 100000 d'hommes et 0 femmes ?

    PS : Un insert insère 1 ligne. Si tu passes 2 inserts séparés ça insèrera 2 lignes
    Dans ton cas tu aura 1 ligne par homme et 1 ligne par femme.
    Effectivement... et ce n'est pas mon objectif. J'ai finalement résolu mon problème à l'aide d'un script PL/SQL

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

Discussions similaires

  1. SQL : syntaxe insert into select
    Par chrislauxerrois dans le forum Access
    Réponses: 15
    Dernier message: 31/07/2006, 16h12
  2. [Oracle 9] Anomalie insert into select
    Par maxidoove dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/05/2006, 14h11
  3. probleme dans un INSERT INTO...........SELECT
    Par briiice dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/01/2006, 15h13
  4. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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