Script PL/SQL pour effectuer des contrôles de cohérence entre tables.
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:
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:
Citation:
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
Si certains pouvaient m'aiguiller sur ce point, je les remercie par avance.
Bonne journée.
Olivier