2016-11-22 1 views
-1

J'ai utilisé TOAD, Oracle 11g.Exécuter le script d'insertion de TOAD

Je souhaite créer un script d'insertion par lots.

Exemple

INSERT INTO tbl_name (a,b,c) 
VALUES(1,2,3),(4,5,6),(7,8,9); 

Mais, quand je DataSet à l'exportation - insérer des déclarations, je reçois:

Insert into tbl_name (1, 2, 3) 
    Values (1, 2, 3); 

Insert into tbl_name (1, 2, 3) 
Values (1, 2, 3); 

Ainsi, il prend beaucoup de temps, car il y a trop de lignes.

Y a-t-il un moyen?

Merci!

+1

Oracle ne prend pas en charge les instructions d'insertion à plusieurs lignes. La seule façon de le faire est d'utiliser plusieurs insertions. La syntaxe de votre première instruction ne fonctionne pas avec Oracle. –

+0

ah ... d'accord. Je vous remercie! – BaeDa

Répondre

1

Malheureusement Oracle ne supporte pas d'insérer des lignes de mutlitple avec les valeurs clause comme dans

INSERT INTO tbl_name (a,b,c) VALUES (1,2,3),(4,5,6),(7,8,9); 

Il faudrait convertir en un insert pour sélectionner Oracle:

INSERT INTO tbl_name (a,b,c) 
    SELECT 1,2,3 FROM DUAL 
    UNION ALL 
    SELECT 4,5,6 FROM DUAL 
    UNION ALL 
    SELECT 7,8,9 FROM DUAL; 

ou écrire insérer des instructions séparées comme vous l'avez déjà montré.

0

J'ai un audit quotidien où je dois mettre à jour de quelques lignes à quelques milliers. J'entoure le code avec 'Begin/commit/end' et il s'exécute en quelques secondes au lieu des minutes nécessaires pour exécuter les mises à jour une à la fois.

begin 
update my_audit set audit_date = sysdate, audit_by = trim(q'{DBA for DLD}'), audit_comments = trim(q'{ RFC-009999 Fix blah blah blah for 1000 entries }') , audit_complete = 'Y' where row_id = 4754973; 
    ... 998 update statements here ... 
update my_audit set audit_date = sysdate, audit_by = trim(q'{DBA for DLD}'), audit_comments = trim(q'{  RFC-009999 Fix blah blah blah for 1000 entries }') , audit_complete = 'Y' where row_id = 4755973;  
commit; 
end; 

Je ne INTRODUISE un problème de mémoire quand j'ai essayé de le faire avec 50.000 lignes. Je l'ai juste divisé en plusieurs blocs begin/commit/end et j'ai recommencé, et tout a bien fonctionné.