Problème de synchronisation entre deux tables sans clef primaire
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
Code:
1 2 3 4
| CREATE TABLE FOO(
A VARCHAR2(250) NOT NULL,
B VARCHAR2(250),
C VARCHAR2(250) NOT NULL); |
Pour gérer la suppression des données périmées, j'ai un code du style:
Code:
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; |
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.
Ma question est comment faire sans clé primaire ?