Bonjour,
Dans le cadre d'un nettoyage d'une base de données Oracle, je dois effectuer des contrôles de cohérence entre deux tables.
Un comptage entre deux tables ne suffit pas à affirmer qu’il y a du « un pour un » entre ces deux tables.
C'est à dire que l’égalité du nombre de postes ne permet pas d’affirmer qu’il s’agit de la même liste de références.
Par conséquent, il faut bien effectuer les requêtes de sélection en utilisant l'ordre "minus" dans les deux sens.
Je souhaite également, à la suite de ces requêtes de sélection, mettre à jour un indicateur de cohérence dans une table
(champ "INDCOHAV" de la table CPT_PURGE).
Voici le code associé que je cherche à faire:
Code sql : 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
18
19
20
21
22
23
24
25
26
27 -- Codes erreurs Oracle pour quitter le programme des la premiere erreur rencontree WHENEVER SQLERROR EXIT 61 WHENEVER OSERROR EXIT 62 -- Controles INTRA SIG -- SIG_RECO05 -- Mise a jour de l'indice de coherence avant purge DECLARE nbre1 Number; nbre2 Number; BEGIN -- Toute reference dans la table SIG_RECO05 doit etre dans la table SIG_RECO04 et vice-versa SELECT ACO005_NUMFEU8 into nbre1 FROM SIG_RECO05 minus SELECT RECO04_NUMFEU8 FROM SIG_RECO04; SELECT RECO04_NUMFEU8 into nbre2 FROM SIG_RECO04 minus SELECT ACO005_NUMFEU8 FROM SIG_RECO05; IF (nbre1+nbre2=0) THEN EXECUTE IMMEDIATE 'UPDATE CPT_PURGE SET INDCOHAV=0 WHERE NOMTABLE='SIG_RECO05''; ELSE EXECUTE IMMEDIATE 'UPDATE CPT_PURGE SET INDCOHAV=1 WHERE NOMTABLE='SIG_RECO05''; END IF; END; / COMMIT; QUIT
Cela me retourne l'erreur suivante:
Si certains pouvaient m'aiguiller sur ce point, je les remercie par avance.fich.log" 30 lines, 1299 characters
--------------------------------------------------------
103609-Execution du fichier /ficsql/fich.sql via SQLPLUS
EXECUTE IMMEDIATE 'UPDATE CPT_PURGE SET INDCOHAV=0 WHERE NOMTABLE='SIG_RECO05'';
*
ERROR at line 9:
ORA-06550: line 9, column 70:
PLS-00103: Encountered the symbol "SIG_RECO05" when expecting one of the following:
* & = - + ; < / > at in is mod remainder not rem return
returning <an exponent (**)> <> or != or ~= >= <= <> and or
like LIKE2_ LIKE4_ LIKEC_ between into using || multiset bulk
member SUBMULTISET_
The symbol "* was inserted before "SIG_RECO05" to continue.
ORA-06550: line 11, column 70:
PLS-00103: Encountered the symbol "SIG_RECO05" when expecting one of the
following:
* & = - + ; < / > at in is mod remainder not rem return
returning <an exponent (**)> <> or != or ~= >= <= <> and or
like LIKE2_ LIKE4_ LIKE
103609-Code retour SQLPLUS 61
103609-Traitement du fichier /ficsql/fich.sql realise avec erreur
103609-fin d'execution du fichier /ficsql/fich.sql
Bonne journée.
Olivier
Partager