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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| DECLARE
TYPE TREC_pa IS RECORD (LC_t37_code B2801.T37_CODE%TYPE,
LC_ta_lib B0300.TA_LIB%TYPE,
LC_an1_montant B2801.AN1_MONTANT%TYPE,
LC_an1_libel B2801.AN1_LIBEL%TYPE,
LC_an1_type B2801.AN1_TYPE%TYPE,
LC_t37_ordre B2801.T37_ORDRE%TYPE);
TYPE LTY_tbl IS TABLE OF TREC_pa INDEX BY BINARY_INTEGER;
LTY_t LTY_tbl;
LN_i BINARY_INTEGER := 0;
CURSOR LCU_2801 IS
SELECT T37_CODE, TA_LIB, AN1_MONTANT, AN1_LIBEL, AN1_TYPE, T37_ORDRE
FROM B2801, B0300
WHERE AN_CODE = :B2800.AN_CODE
AND TA_TABLE = '37'
AND TA_CODE = T37_CODE
ORDER BY T37_ORDRE;
BEGIN
-- bloc B2800
GO_BLOCK('B2800');
-- bloc B2801
OPEN LCU_2801;
LOOP
LN_i := LN_i + 1;
FETCH LCU_2801 INTO LTY_t(LN_i);
EXIT WHEN LCU_2801%NOTFOUND;
END LOOP;
CLOSE LCU_2801;
GO_BLOCK('B2801');
CLEAR_BLOCK(NO_VALIDATE);
GO_BLOCK('B2800');
CREATE_RECORD;
DUPLICATE_RECORD;
BEGIN
-- génération AN_CODE
SELECT LPAD(S_AN_CODE.NEXTVAL, 8, '0')
INTO :B2800.AN_CODE
FROM DUAL;
EXCEPTION WHEN NO_DATA_FOUND THEN
RAISE FORM_TRIGGER_FAILURE;
WHEN TOO_MANY_ROWS THEN
RAISE FORM_TRIGGER_FAILURE;
END;
-- bloc B2801
DESACTIVER_AN_TYPE;
-- copie des variables temporaires (B2801)
GO_BLOCK('B2801');
FOR LN_i IN LTY_t.FIRST..LTY_t.LAST
LOOP
CREATE_RECORD;
:B2801.AN_CODE := :B2800.AN_CODE;
:B2801.T37_CODE := LTY_t(LN_i).LC_t37_code;
:B2801.TA_LIB := LTY_t(LN_i).LC_ta_lib;
:B2801.AN1_MONTANT := LTY_t(LN_i).LC_an1_montant;
:B2801.AN1_LIBEL := LTY_t(LN_i).LC_an1_libel;
:B2801.AN1_TYPE := LTY_t(LN_i).LC_an1_type;
:B2801.T37_ORDRE := LTY_t(LN_i).LC_t37_ordre;
END LOOP;
FIRST_RECORD;
GO_ITEM('B2800.T48_LIEU');
MSG_BOX('L''identifiant attribué au duplicata est : ' || :B2800.AN_CODE);
DO_KEY('COMMIT_FORM');
END; |
Partager