Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/08/2004, 10h35   #1
Invité régulier
 
Inscription : mai 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 41
Points : 8
Points : 8
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.
ana2sb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 10h41   #2
Membre du Club
 
Inscription : août 2003
Messages : 183
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 183
Points : 58
Points : 58
A ma connaissance c'est impossible.

Mais pourquoi ne fais-tu pas plusieurs INSERT dans une procédure stockée ?
webtheque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 10h47   #3
Membre éclairé
 
Inscription : novembre 2002
Messages : 533
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 533
Points : 359
Points : 359
bonjour,

c'est tout à fait possible :

Code :
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
PpPool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 11h00   #4
Invité régulier
 
Inscription : mai 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 41
Points : 8
Points : 8
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?
ana2sb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 11h02   #5
Membre du Club
 
Inscription : août 2003
Messages : 183
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 183
Points : 58
Points : 58
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 ?
webtheque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 11h04   #6
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 530
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 530
Points : 6 460
Points : 6 460
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 11h10   #7
Invité régulier
 
Inscription : mai 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 41
Points : 8
Points : 8
Sheik Pourrais tu donner plus de détails stp

Choukrane
ana2sb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 11h15   #8
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 530
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 530
Points : 6 460
Points : 6 460
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 11h49   #9
Invité régulier
 
Inscription : mai 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 41
Points : 8
Points : 8
Quelle collection devrais je utiliser ? VARRAY ou NESTED TABLE ou INDEX-BY Varchar2 ou Long ??
ana2sb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 12h05   #10
Invité régulier
 
Inscription : mai 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 41
Points : 8
Points : 8
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
ana2sb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 13h45   #11
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 530
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 530
Points : 6 460
Points : 6 460
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 14h40   #12
Invité régulier
 
Inscription : mai 2004
Messages : 41
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 41
Points : 8
Points : 8
Merci
ana2sb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2004, 15h42   #13
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 530
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 530
Points : 6 460
Points : 6 460
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/pl_sql/?page=Chap5#L5.5

Citation:
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h17.


 
 
 
 
Partenaires

Hébergement Web