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 28 29 30
|
CREATE OR REPLACE PROCEDURE ps_concat_crit(etab_naiss IN integer, no_immeuble IN integer, no_lot IN char) AS
CURSOR GetCrit IS SELECT * FROM P_DESG WHERE DSG_Domaine_Appli='Lot' AND DSG_No_Etab_Nais=etab_naiss AND DSG_No_Immeuble=no_immeuble AND DSG_No_Lot=no_lot;
CURSOR existEnreg IS SELECT COUNT(*) FROM T_Lots_crit WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
crits varchar2(30000);
niu_courant P_DESG%ROWTYPE;
NbEnreg integer;
BEGIN
FOR niu_courant IN GetCrit LOOP
crits := TRIM(crits) || 'NIU' || To_char(niu_courant.DSG_NIU) || '=' || niu_courant.DSG_Valeur_descriptif || ';';
END LOOP;
OPEN existEnreg;
LOOP
FETCH existEnreg INTO NbEnreg;
IF (NbEnreg=0) THEN
INSERT INTO T_Lots_crit(TLC_No_Etab_Naiss,TLC_No_Imm,TLC_No_Lot,TLC_Crit) VALUES (etab_naiss,no_immeuble,no_lot,crits);
ELSE
UPDATE T_Lots_crit SET TLC_Crit=crits WHERE TLC_No_Etab_Naiss=etab_naiss AND TLC_No_Imm=no_immeuble AND TLC_No_Lot=no_lot;
END IF;
EXIT WHEN existEnreg%NOTFOUND;
END LOOP;
END;
/
SET serverout ON
show error |