PL/SQL Append_Values Indicateur donne le message d'erreur

Je vais avoir du mal à faire un grand nombre d'insertions dans une table Oracle à l'aide de PL/SQL. Ma requête va ligne par ligne et pour chaque ligne de la requête fait un calcul pour déterminer le nombre de lignes nécessaires à l'insertion dans l'autre table. Le classique des inserts de travail, mais le code prend du temps à s'exécuter pour un grand nombre de lignes. Pour accélérer les insertions j'ai essayé d'utiliser le Append_Values soupçon comme dans l'exemple suivant:

BEGIN
FOR iter in 1..100 LOOP
INSERT /*+ APPEND_VALUES*/ INTO test_append_value_hint values (iter);
END LOOP;
END;

Je reçois le message d'erreur suivant lorsque vous faites ceci:

ORA-12838: cannot read/modify an object after modifying it in parallel
ORA-06512: at line 3
12838. 00000 -  "cannot read/modify an object after modifying it in parallel"
*Cause:    Within the same transaction, an attempt was made to add read or
           modification statements on a table after it had been modified in parallel
           or with direct load. This is not permitted.
*Action:   Rewrite the transaction, or break it up into two transactions
           one containing the initial modification and the second containing the
           parallel modification operation.

Quelqu'un a des idées pour rendre ce code fonctionne, ou comment insérer rapidement un grand nombre de lignes dans une autre table?

Où sont les lignes à venir? Avez-vous vraiment voulez juste pour insérer les numéros de 1 à 100? Ou êtes-vous vraiment en tirant les données à partir d'une source?
Je me suis donné un tableau avec des individus aussi bien que les dates de début et fin que les individus inscrits dans un programme. Pour la table de sortie, j'ai besoin d'une ligne pour chaque mois/année où la personne a été inscrite dans le programme. Donc, si une personne a une date de début de 12/21/2012 et une date de fin de 4/10/2013, j'aurais besoin de cinq documents pour l'individu (un record pour 12/2012, 01/2013, 02/2013, 03/2013, et 04/2013). Mon code PL/SQL sans le APPEND_VALUES astuce fonctionne bien pour les petites tables, mais ma table a environ un million de lignes.
Plutôt ne pas l'utiliser. En particulier à partir de PL/SQL, il devrait être possible de réécrire le code en pur SQL "insert /* +AJOUTER */ ..select". En outre, cette solution n'est pas parce qu'une seule session peut ajouter à une table en même temps. En outre voie directe d'écriture est utilisé que dans certaines circonstances, comme aucun FKs sur une table. Si vous voulez vraiment faire de l'accélération de votre ETL utilisation ALTER SESSION FORCE PARALLEL DML.

OriginalL'auteur user3312037 | 2014-02-14