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.
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.
A ma connaissance c'est impossible.
Mais pourquoi ne fais-tu pas plusieurs INSERT dans une procédure stockée ?
bonjour,
c'est tout à fait possible :
ATTENTION : au type de tes champs, of course !!! Ne pas insérer un VARCHAR2 dans un INTEGER
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 .....;
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?
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 ?
C'est possible en utilisant une collection et l'instruction FORALL
il faudra tout de même renseigner la collection ligne par ligne.
Sheik Pourrais tu donner plus de détails stp
Choukrane
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
Quelle collection devrais je utiliser ? VARRAY ou NESTED TABLE ou INDEX-BY Varchar2 ou Long ??
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
Les tables INDEX-BY sont les plus faciles à utiliser.
Merci
exemple donné dans le chapitre 5 du Guide PL/SQLEnvoyé par ana2sb
http://sheikyerbouti.developpez.com/...age=Chap5#L5.5
notez l'utilisation de l'instruction FORALL sur les collections tab1() et tab2()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
dans votre cas, une collection de records sera probablement plus appropriée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager