En création permet d'attribuer un N° libre ex : &GENERER_NUMERO(TARCAE;CCATCA;99999;W_NUM) 1 Nom fichier 10 2 Nom Zone DDS (clé unique) 10 3 Longueur Max (ex: 99999) 4 Valeur Retour(renseigné si OK) 9 0 * SGS => récupérer un N° libre * Si on arrive au bout du fichier on cherche les trous * ATTENTION LE 3È PARAM DOIT ÊTRE UN CHIFFRE (PAS DE VARIABLE !) * LE PGM PLANTE SI CODE CONTENANT DES CARATÈRES (A0001) !!! * Exemple d'appel => &GENERER_NUMERO(TARCAE;CCATCA;99999;W_CAT) * ---------------------------------------------------------------- * * NOM FICHIER 10 * NOM ZONE DDS (CLÉ UNIQUE) 10 * LONGUEUR 9 0 * VALEUR RETOUR 9 0 * ---------------------------------------------------------------- * DECLARER MIGLNG;MIG_LNG 9;0 DECLARER MIGRET;MIG_RET 9;0 MIG_LNG = :03 MIG_RET = 0 :04 = 0 * -Méthode 1 on cherche le N° suivant ---------------------------- * DEBUT_SQL + SELECT IFNULL(DEC(MAX(:02)) + 1, 1) + INTO :MIG_RET + FROM :01 FIN_SQL * ---------------------------------------------------------------- * SI MIG_RET > MIG_LNG * -Méthode 2 on cherche les trous -------------------------------- DEBUT_SQL + SELECT IFNULL(DEC(A.:02) - 1 , 0) AS NEWCAT + INTO :MIG_RET + FROM :01 A + WHERE NOT EXISTS(SELECT * FROM :01 B + WHERE DEC(B.:02) = DEC(A.:02) - 1 ) AND DEC(A.:02) > 1 + ORDER BY NEWCAT + FETCH FIRST ROWS ONLY FIN_SQL * ---------------------------------------------------------------- FIN SI MIG_RET <= MIG_LNG :04 = MIG_RET FIN