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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| connect system/manager@adi2;
grant create any procedure to hdr;
connect hdr/hdr@adi2
SET TERM ON ;
CREATE SEQUENCE T_IDENTITES_Seq INCREMENT BY 1 NOMAXVALUE NOMINVALUE NOCYCLE CACHE 20 NOORDER;
CREATE OR REPLACE TRIGGER T_IDENTITES_ID_Trg
before insert on T_IDENTITES
for each row
DECLARE
MonID number := NULL;
BEGIN
select T_IDENTITES_Seq.nextval into MonID from dual;
:new.ID := MonID;
END;
/
CREATE OR REPLACE PROCEDURE CREER_IDENTITES
(
PNOMBRE NUMBER
)
AS
I NUMBER;
vID NUMBER;
vMODULO NUMBER;
vSEXE CHAR(1);
vDATE_NAISS DATE;
vMOIS NUMBER;
vJOUR NUMBER;
vANNEE NUMBER;
vMAX_PRENOMS NUMBER;
vMIN_PRENOMS NUMBER;
vNB_PRENOMS NUMBER;
vPRENOM NUMBER;
vMAX_NOMS NUMBER;
vMIN_NOMS NUMBER;
vNB_NOMS NUMBER;
vNOM NUMBER;
vNOM2 NUMBER;
BEGIN
I := 0;
SELECT MAX(ID) FROM T_IDENTITES FOR :vID;
vID = vID +1;
SELECT MAX(ID) FROM T_PRENOMS FOR :vMAX_PRENOMS;
SELECT MIN(ID) FROM T_PRENOMS FOR :vMIN_PRENOMS;
vNB_PRENOMS = vMAX_PRENOMS - vMIN_PRENOMS;
SELECT MAX(ID) FROM T_NOMS FOR :vMAX_NOMS;
SELECT MIN(ID) FROM T_NOMS FOR :vMIN_NOMS;
vNB_NOMS = vMAX_NOMS - vMIN_NOMS;
WHILE (I < PNOMBRE) DO
BEGIN
I = I + 1;
vID = T_IDENTITES_ID_Trg;
vMODULO = vID - ((vID /2) * 2);
IF (vMODULO = 0)
THEN vSEXE = 'F';
ELSE vSEXE = 'M';
vMODULO = vID - ((vID /12) * 12);
vMOIS = vMODULO + 1;
vMODULO = vID - ((vID /28)) * 28);
vJOUR = vMODULO + 1;
vMODULO = vID - ((vID /99) * 99);
vANNEE = vMODULO + 1903;
vDATE_NAISS = vMOIS||'/'||vJOUR||'/'||vANNEE;
vMODULO = vID - ((vID / vNB_PRENOMS) * vNB_PRENOMS);
vPRENOM = vMODULO + vMIN_PRENOMS;
vMODULO = vID - ((vID / vNB_NOMS) * vNB_NOMS);
vNOM = vMODULO + vMIN_NOMS;
INSERT INTO T_IDENTITES (
ID,
SEXE,
DATE_NAISS )
VALUES (
:vID,
:vSEXE,
:vDATE_NAISS );
INSERT INTO T_PRENOMS_IDENTITES (
IDENTITE,
PRENOM,
USUEL )
VALUES (
:vID,
:vPRENOM,
'U' );
INSERT INTO T_NOMS_IDENTITES (
IDENTITE,
NOM,
NATURE )
VALUES (
:vID,
:vNOM,
'N' ); /* Nom de naissance */
vMODULO = vID - ((vID /4) * 4);
IF (vMODULO = 0) THEN /* Une femme sur deux */
BEGIN
vNOM2 = vMIN_NOMS + vMAX_NOMS - vNOM; /* Autre valeur dans le même intervalle */
IF (vNOM = vNOM2) THEN vNOM2 = vNOM2 + 1;
INSERT INTO T_NOMS_IDENTITES (
IDENTITE,
NOM,
NATURE )
VALUES (
:vID,
:vNOM2,
'M' ); /* Nom marital */
END
END
END
SET TERM OFF;
COMMIT WORK; |
Partager