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
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
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 ....
les données que je veux insérer ne sont pas déjà stockée en base, je ne peux donc pas faire
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part INSERT INTO TABLE(col1, col2) SELECT c1, c2 FROM ...
Salut,
Il y a le sqlloader ou utl_file
http://jaouad.developpez.com/sqlldr/
sûr que sql load est une bonne approche. Techniquement, tu pourrais essayer :
quel est ton problème avec un insert par ligne ?
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;
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 :
Y a t -il une parade ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ORA-24335: nombre de colonnes acceptées limité à 1000
1/ merci de préciser la version d'oracle
2/ tu as la solution des tables externes qui peut largement être envisagée si tu es au moins en 9i. Tu transformes ton fichier excel en CSV et le tour est joué.
Je t'invite à rechercher EXTERNAL TABLE sur le forum
3/ Sinon comme cela a déjà été dit SQL*Loader seras ton ami![]()
@
1/ la version d'oracle est : Oracle9i Release 9.2.0.6.0
2/ et 3/ il me semble que dans ces 2 cas je dois créer un fichier csv sur le serveur de base de données. Je ne suis pas admin et je n'ai auncun accès au serveur de base de données, je suis juste utilisateur.
![]()
Bonjour,
Peux être pourrais tu créer ta table externe sur une base locale et y accéder par un dblink.
Sinon pour le probléme de limitation de colonnes, scinde la requête.
Cdt
pour sqlloader, tu n'as pas besoin d'avoir de fichier sur le serveur, sqlloader fonctionne comme sqlplus avec un client oracle
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 :
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.
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;
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 ;
étonnant, chez moi ça marche parfaitement
Quelle est ta version?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SQL> CREATE TABLE t(x number,y number); Table created. SQL> INSERT ALL INTO t VALUES (1,1) INTO t VALUES (2,2) INTO t VALUES (3,3) 2 SELECT 'x' FROM dual; 3 rows created.
La restriction vient d'ici :
Si on se réfère à la documentation Oracle :
In a multitable insert, all of the insert_into_clauses cannot combine to specify more than 999 target columns.
Hello à tous (des années après)
comme j'avais indiqué dans mon dernier post cette méthode fonctionne bien mais il y a effectivement une limitation (à 999 ou 1000).
Personnellement j'avais contourné le problème en faisant plusieurs requêtes
PoichOU
ça me rappelle un peu :
http://laurentschneider.com/wordpres...n-a-query.html
Bon, si tu as des milliers de valeurs à entrer en une seule transaction, mieux vaut une table intermédiaire qu'une commande à s'arracher les yeux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2perl -e 'print("select ".(("1,"x50 ."\n")x200)."1 from dual;\n")'| sqlplus -s -L scott/tiger
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 create global temporary table temp(x number); insert into temp values(1); insert into temp values(2); -- .. insert into temp values(999999); insert into yourtable select * from temp; commit;
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