Bonjour à tous,
J'ai un petit soucis concernant une bête synchronisation entre deux tables en utilisant BULK COLLECT / FORALL.
Mes enregistrements n'ont pas de clé primaire et se composent uniquement de "clés" dont l'une des valeurs peut-être null.
Exemple
Pour gérer la suppression des données périmées, j'ai un code du style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE TABLE FOO( A VARCHAR2(250) NOT NULL, B VARCHAR2(250), C VARCHAR2(250) NOT NULL);
Pour mes autres tables, je mettais le MINUS dans une sous-vue et je récupérai que les clés primaires. Et pour le delete je mettais les clés primaires dans le WHERE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 DECLARE FOO_ARRAY_TYPE IS TABLE OF FOO%ROWTYPE; FOO_ARRAY FOO_ARRAY_TYPE; FOO_DEL_CURSOR IS SELECT old.A, old.B, old.C FROM FOO old MINUS SELECT new.A, new.B, new.C FROM BAR new; BEGIN OPEN FOO_DEL_CURSOR; LOOP FETCH FOO_DEL_CURSOR BULK COLLECT INTO FOO_ARRAY LIMIT 50000; FORALL i IN FOO_ARRAY.FIRST ... FOO_ARRAY.LAST DELETE FOO WHERE ???; COMMIT; EXIT WHEN FOO_DEL_CURSOR%NOTFOUND; END LOOP; END;
Ma question est comment faire sans clé primaire ?
Partager