2014-07-08 4 views

Répondre

0

En supposant que vous avez quelque chose comme

CREATE TYPE my_nested_table_type 
    AS TABLE OF <<something>>; 

DECLARE 
    l_nt my_nested_table_type; 
BEGIN 
    <<something that populates l_nt>> 

alors la façon de faire un gros insert des données de la collection en un tas -Organisation tableau serait d'utiliser un FORALL

FORALL i in 1..l_nt.count 
    INSERT INTO some_table(<<list of columns>>) 
    VALUES(l_nt(i).col1, l_nt(i).col2, ... , l_nt(i).colN); 
+0

merci, j'utilisais « FOR i IN 1 .. data.count LOO P ". Y a-t-il une différence entre "FORALL i in 1.DATA.COUNT" et mon ancienne solution? le mot-clé FORALL est-il vraiment plus rapide? – Fulley

+0

@Fulley - Le 'FORALL' fait une liaison en masse des données. Le 'FOR 'ne le fait pas. Le 'FORALL' élimine les changements de contexte supplémentaires entre SQL et PL/SQL. Cela peut ou non entraîner des impacts significatifs sur le rendement. Cela dépendra de la fraction de l'exécution de votre programme qui sera utilisée avec ces changements de contexte. –

+0

@JustinCave - Savez-vous depuis quand cela est possible? Pour autant que je me souvienne des versions précédentes d'Oracle, FORALL n'était possible que pour les types de tables simples comme ... AS TABLE OF NUMBER, mais pas pour les types d'enregistrements comme ... AS TABLE de EMP% ROWTYPE, par exemple. –

Questions connexes