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 :

Insertion multiple sous Oracle


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut Insertion multiple sous Oracle
    Bonjour,

    je voudrais faire une insertion multiple sous Oracle, est-ce possible ?

    j'ai testé la commande spécifiée danc le tutoriel http://sql.developpez.com/sqlaz/dml/#L1.2 mais sans succès.

    Quelqu'un à déjà fait ça ?

    PoichOU

  2. #2
    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
    Non pas sous oracle.
    tu peux faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE(col1, col2) SELECT c1, c2 from ....

  3. #3
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    les données que je veux insérer ne sont pas déjà stockée en base, je ne peux donc pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLE(col1, col2) SELECT c1, c2 FROM ...
    mon but est d'insérer des données provenant d'un fichier excel dans une table. J'ai donc beaucoup de ligne, n'y a t-il pas un moyen d'éviter de faire une requête insert par ligne ?

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Il y a le sqlloader ou utl_file
    http://jaouad.developpez.com/sqlldr/

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    sûr que sql load est une bonne approche. Techniquement, tu pourrais essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create table t(x number,y number);
     
    insert all into t values (1,1) into t values (2,2) into t values (3,3) 
    select 'x' from dual;
    quel est ton problème avec un insert par ligne ?

  6. #6
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    mon problème est que j'ai 100 000 lignes !


    j'ai testé ta méthode, elle marche !

    J'ai donc construit une super requête avec toutes mes lignes à insérer, le seul problème c'est qu'il me fait un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-24335: nombre de colonnes acceptées limité à 1000
    Y a t -il une parade ?

  7. #7
    Membre très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Par défaut
    Bon j'ai rencontré le même problème et ai trouvé la solution, c'est pourquoi je me permet de remonter ce vieux sujet.
    Vu qu'il apparait en bonne place dans Google, ça pourra sans doute servir.

    J'utilisais la méthode de laurentschneider dans une transaction lancée par un programme CSharp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table t(x number,y number);
     
    insert all into t values (1,1) into t values (2,2) into t values (3,3) 
    select 'x' from dual;
    et obtenait l'erreur ORA-24335 quand j'avais trop de données. En fait cette méthode d'insertion est à réserver quand on veut insérer dans des tables multiples.

    Quand on veut insérer dans une seule table il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO table (column1, column2)
    SELECT value1, value2 FROM DUAL UNION ALL
    SELECT value1, value2 FROM DUAL UNION ALL
    ...etc...
    SELECT value1, value2 FROM DUAL ;

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

Discussions similaires

  1. Insertion multiple + sous-requête
    Par Cyprien_ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/10/2007, 17h14
  2. Insertion de multiples sous formulaires
    Par EGSway dans le forum IHM
    Réponses: 1
    Dernier message: 10/10/2007, 20h17
  3. Réponses: 1
    Dernier message: 21/12/2006, 17h06
  4. [Oracle 10g]Insertion multiple, oracle 10g
    Par ViRouF dans le forum Oracle
    Réponses: 6
    Dernier message: 25/02/2006, 07h22
  5. Insertion multiple à base de sous requête SELECT
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/04/2005, 16h34

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