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

PL/SQL Oracle Discussion :

PL/SQL Faire plusieurs enregistrement en un seul INSERT


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 23
    Points
    23
    Par défaut PL/SQL Faire plusieurs enregistrement en un seul INSERT
    Bonjour,

    Je possède Oracle 8i et je souhaiterais comme le sujet l'indique faire plusieurs enregistrement dans ma table en une fois. C'est-à-dire en faisant un seul Insert into....
    Comment faire ?

    Merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    A ma connaissance c'est impossible.

    Mais pourquoi ne fais-tu pas plusieurs INSERT dans une procédure stockée ?

  3. #3
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    bonjour,

    c'est tout à fait possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO MA_TABLE(CHAMP1)
    SELECT CHAMP_A_INSERER
    FROM TABLE 
    WHERE .....;
    ATTENTION : au type de tes champs, of course !!! Ne pas insérer un VARCHAR2 dans un INTEGER
    PpPool

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Merci de vos réponses.
    Cependant PpPool ta solution est la même que si je faisais une importation d'une autre table. Or les enregistrements que je veux entrer ne sont pas dans une autre table.
    Je vais plutôt voir ce que je peux faire avec les procédures stockées.
    Mais comment cela fonctionne?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    La solution me surprend car si tu fais un INSERT d'un SELECT c'est que les données sont déjà dans une table.
    As-tu la syntaxe pour insérer sans le SELECT ?

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    C'est possible en utilisant une collection et l'instruction FORALL

    il faudra tout de même renseigner la collection ligne par ligne.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Sheik Pourrais tu donner plus de détails stp

    Choukrane

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Tout est expliqué dans l'article Guide PL/SQL (cours et tutoriels Oracle) au chapitre enregistrements et collections

    l'idée est de déclarer une collection, de la renseigner à la main (ou par un ordre select) et de réaliser l'insert en un seul bloc en utilisant l'instruction FORALL
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Quelle collection devrais je utiliser ? VARRAY ou NESTED TABLE ou INDEX-BY Varchar2 ou Long ??

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Pourrais tu m'ecrire en résumé le code pour insérer plusieurs enregistrement en un bloc d'instruction ?

    Attention : chaque lignes d'enregistrement sont différentes les unes des autres

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Les tables INDEX-BY sont les plus faciles à utiliser.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Merci

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par ana2sb
    Pourrais tu m'ecrire en résumé le code pour insérer plusieurs enregistrement en un bloc d'instruction ?

    Attention : chaque lignes d'enregistrement sont différentes les unes des autres
    exemple donné dans le chapitre 5 du Guide PL/SQL

    http://sheikyerbouti.developpez.com/...age=Chap5#L5.5

    SQL> Declare
    2 TYPE TYP_TAB_NUM IS TABLE OF TEST.B%TYPE INDEX BY PLS_INTEGER ;
    3 TYPE TYP_TAB_CAR IS TABLE OF TEST.A%TYPE INDEX BY PLS_INTEGER ;
    4 tab1 TYP_TAB_NUM ;
    5 tab2 TYP_TAB_CAR ;
    6 LN$T1 number ;
    7 LN$T2 number ;
    8 LN$T3 number ;
    9 begin
    10 For i in 1..50000 Loop
    11 tab1(i) := i ;
    12 tab2(i) := ltrim( to_char( i ) ) ;
    13 End loop ;
    14
    15 Select to_char( sysdate, 'SSSSS' ) into LN$T1 from dual ;
    16
    17 For i in 1..50000 Loop
    18 Insert into TEST( A, B ) Values( tab2(i), tab1(i) ) ;
    19 End loop ;
    20
    21 Select to_char( sysdate, 'SSSSS' ) into LN$T2 from dual ;
    22
    23 Forall i in 1..50000
    24 Insert into TEST( A, B ) Values( tab2(i), tab1(i) ) ;
    25
    26 Select to_char( sysdate, 'SSSSS' ) into LN$T3 from dual ;
    27
    28 dbms_output.put_line( 'Temps d''exécution en secondes' ) ;
    29 dbms_output.put_line( 'For ' || to_char(LN$T2 - LN$T1) ) ;
    30 dbms_output.put_line( 'Forall ' || to_char(LN$T3 - LN$T2) ) ;
    31
    32
    33 End ;
    34 /
    Temps d'exécution en secondes
    For 14
    Forall 1
    notez l'utilisation de l'instruction FORALL sur les collections tab1() et tab2()
    dans votre cas, une collection de records sera probablement plus appropriée
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/06/2009, 11h46
  2. Réponses: 1
    Dernier message: 26/04/2006, 09h52
  3. plusieurs enregistrements dans une seul ligne
    Par Celelibi dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 15h55
  4. Insérer plusieurs enregistrements en une seule requête
    Par pyd001 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/02/2004, 10h38

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