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 : 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 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
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 ?