Fonctions Pipelined et tables mutantes
Bonjour,
Je fais des insertions en utilisant les fonctions Pipelined. J'insère à partir d'une table source T_SOURCE vers une table cible T_CIBLE, qui ont la structure suivante:
Code:
1 2 3
|
CREATE TABLE T_SOURCE (entite char(10), memo char(1000));
CREATE TABLE T_CIBLE (entite char(10), seq number(4,0), memo char(1000)); |
(PK de la table T_CIBLE est entite,seq)
La commande pour insérer est la suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11
| BEGIN
INSERT /*+ PARALLEL(t, 10) */
INTO T_CIBLE t
SELECT *
FROM TABLE(
MyPackage_1.PIPE_CIBLE ( SYSDATE,
CURSOR(SELECT /*+ PARALLEL(p, 10) */ * FROM T_SOURCE p)));
EXCEPTION
WHEN OTHERS THEN
/*SORTIR EN ERREUR*/
END; |
A l'intérieur de ma fonction PIPE_CIBLE, je dois calculer moi-même la séquence qui va être insérée dans T_CIBLE (pour éviter PK), pour ça je suis obligé de faire:
Code:
1 2 3 4
| SELECT NVL(MAX(seq), 0) + 1
INTO t_cible_record.seq
FROM T_CIBLE
WHERE entite = t_cible_record.entite; |
Mais je rencontre le problème de table mutante, vu que j'insère dans T_CIBLE et en même temps j'essaie de faire un SELECT sur la même table !!
Je cherche donc à savoir quel est le moyen le plus performant pour calculer ma séquence sans avoir de contrainte PK.
Merci d'avance