Bonjour,
supposons une table TRSCOMPTT avec un champ IDCASE et une vingtaine d'autres champs.
IDCASE permet de distinguer les types de lignes.
Les lignes de type B1 doivent avoir les champs numéro 2, 3, 4 obligatoires
Les lignes de type B2 doivent avoir les champs numéro 2, 3, 6 obligatoires
Les lignes de type B2 doivent avoir les champs numéro 8, 10, 11 obligatoires
...
Pour vérifier que chaque type de lignes a ses champs obligatoires de renseigné, j'ai créé une petite routine s'appuyant sur une table de paramétrage REFVCASET contenant un champ IDCASE, et un champ IDCHAMP. Cette table donne pour chaque case, les champs obligatoires.
Le jeu consiste à lister les lignes dont les champs obligatoires ne sont pas renseignés pour la case. Voici mon bout de code qui ne me ramène rien alors qu'il devrait. Le pb vient probablement de "l'égalité" REC_CHAMP.IDCHAMP is null. Il faudrait transformer le résultat du curseur en un champ... Qui sait faire ?
/* Sélection des données transmises par Arvato */
cursor CUR_CASE is
select distinct IDCASE from TRSCOMPTT;
/* Curseur de sélection des champs obligatoire par case */
cursor CUR_CHAMP (v_idcase varchar2) is
select IDCHAMP
from REFVCASET
for REC_CASE in CUR_CASE loop
for REC_CHAMP in CUR_CHAMP (REC_CASE.IDCASE) loop
/* Insertion des enregistrements rejetés */
insert into EXPCOMPTT (MSCPT,ETAT,IDCASE,IDSOCAS,
IDTITRE,NOPARUT,IDFAPRD,IDARTIC,
IDPAYS,IDGRP,IDTYRGL,IDSOCASD,
IDTITRED,NBEX,MTTTC,IDTVARG,
IDTVATY,TXTVA,MTHT,MTTVA)
select MSCPT,ETAT,IDCASE,IDSOCAS,
IDTITRE,NOPARUT,IDFAPRD,IDARTIC,
IDPAYS,IDGRP,IDTYRGL,IDSOCASD,
IDTITRED,NBEX,MTTTC,IDTVARG,
IDTVATY,TXTVA,MTHT,MTTVA
from TRSCOMPTT
where IDCASE = REC_CASE.IDCASE
and REC_CHAMP.IDCHAMP is null;
end loop;
end loop;
commit;




Répondre avec citation





Partager