1836 lines
54 KiB
SQL
Executable File
1836 lines
54 KiB
SQL
Executable File
-- Groupe 1 manque hibernation et une procedure a revoir
|
||
CREATE OR REPLACE PROCEDURE MAJ_Nourriture_Volaille AS -- Checked (juste pas d'hibernation)
|
||
boire volaille.ABREUVAGE_V%type;
|
||
manger volaille.NOURRI_V%type;
|
||
mort boolean;
|
||
nbJourJeune volaille.NB_JEUNE_V%type;
|
||
poids volaille.POIDS_V%type;
|
||
BEGIN
|
||
for r in (SELECT ID_VOLAILLE, ABREUVAGE_V, NOURRI_V, NB_JEUNE_V, POIDS_V FROM volaille WHERE hibernatin = 'F') loop
|
||
boire := r.ABREUVAGE_V;
|
||
manger := r.NOURRI_V;
|
||
poids := r.POIDS_V;
|
||
mort := FALSE;
|
||
|
||
if (r.NB_JEUNE_V >= 0) then
|
||
nbJourJeune := r.NB_JEUNE_V;
|
||
else
|
||
nbJourJeune := 0;
|
||
end if;
|
||
|
||
if ((manger = 'T') and (boire = 'T')) then
|
||
nbJourJeune := 0;
|
||
poids := poids + 0.65;
|
||
elsif (manger = 'T') then
|
||
nbJourJeune := 0;
|
||
poids := poids + 0.5;
|
||
else
|
||
if (nbJourJeune = 0) then
|
||
poids := poids - 0.2;
|
||
elsif (nbJourJeune = 1) then
|
||
poids := poids - 0.5;
|
||
elsif (nbJourJeune = 2) then
|
||
poids := poids - 1;
|
||
elsif (nbJourJeune = 3) then
|
||
mort := TRUE;
|
||
end if;
|
||
nbJourJeune := nbJourJeune + 1;
|
||
end if;
|
||
|
||
-- dans tous les cas, manger et boire deviennent faux...
|
||
manger := 'F';
|
||
boire := 'F';
|
||
|
||
-- verification final du poids
|
||
if (poids <= 0) then
|
||
mort := TRUE;
|
||
elsif (poids > 3.5) then
|
||
poids := 3.5;
|
||
end if;
|
||
|
||
-- MaJ Database
|
||
if (mort) then
|
||
DELETE FROM volaille WHERE ID_VOLAILLE = r.ID_VOLAILLE;
|
||
else
|
||
UPDATE volaille SET ABREUVAGE_V = boire, NOURRI_V = manger, NB_JEUNE_V = nbJourJeune, POIDS_V = poids WHERE ID_VOLAILLE = r.ID_VOLAILLE;
|
||
end if;
|
||
end loop;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MAJ_Nourriture_Vache AS -- Checked
|
||
boire ferme.ABREUVAGE_VACHE%type;
|
||
manger ferme.NOURRI_VACHE%type;
|
||
poids ferme.POIDS_VACHE%type;
|
||
BEGIN
|
||
-- La vache ne peut pas mourrir dans cette procedure, car toujours nourrie (par l'herbe)
|
||
for r in (SELECT ID_FERMIER, ABREUVAGE_VACHE, NOURRI_VACHE, POIDS_VACHE FROM ferme WHERE HIBERNATION = 'F') loop
|
||
boire := r.ABREUVAGE_VACHE;
|
||
manger := r.NOURRI_VACHE;
|
||
poids := r.POIDS_VACHE;
|
||
|
||
poids := poids + 5; -- poids du a l herbe (dans tous les cas)
|
||
if (manger = 'T') then -- a mange de la paille
|
||
poids := poids + 3;
|
||
end if;
|
||
if (boire = 'T') then -- a bu => prise de poids dans tous les cas car a manger de l herbe (donc a manger)
|
||
poids := poids + 1;
|
||
end if;
|
||
|
||
-- dans tous les cas, manger et boire deviennent faux...
|
||
manger := 'F';
|
||
boire := 'F';
|
||
|
||
-- verification final du poids
|
||
if (poids > 750) then
|
||
poids := 750;
|
||
end if;
|
||
|
||
-- MaJ Database
|
||
UPDATE ferme SET ABREUVAGE_VACHE = boire, NOURRI_VACHE = manger, NB_JEUNE_VACHE = 0, POIDS_VACHE = poids WHERE ID_FERMIER = r.ID_FERMIER;
|
||
end loop;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MAJ_Nourriture_Lapin AS -- Checked
|
||
boireLapereau ferme.ABREUVAGE_J%type;
|
||
mangerLapereau ferme.NOURRI_J%type;
|
||
boireLapin ferme.ABREUVAGE_L%type;
|
||
mangerLapin ferme.NOURRI_L%type;
|
||
nbPetit ferme.NB_PETIT%type;
|
||
nbMoyen ferme.NB_MOYEN%type;
|
||
nbGros ferme.NB_GROS%type;
|
||
nbMale ferme.NB_MALE%type;
|
||
nbFemelle ferme.NB_FEMELLE%type;
|
||
nbLapereauTotal integer;
|
||
nbLapereauDevenantMal integer;
|
||
nbLapereauMourrant integer;
|
||
BEGIN
|
||
for r in (SELECT ID_FERMIER, NB_MALE, NB_FEMELLE, NB_PETIT, NB_MOYEN, NB_GROS, ABREUVAGE_L, NOURRI_L, ABREUVAGE_J, NOURRI_J FROM ferme WHERE HIBERNATION = 'F') loop
|
||
boireLapereau := r.ABREUVAGE_J;
|
||
mangerLapereau := r.NOURRI_J;
|
||
boireLapin := r.ABREUVAGE_L;
|
||
mangerLapin := r.NOURRI_L;
|
||
nbPetit := r.NB_PETIT;
|
||
nbMoyen := r.NB_MOYEN;
|
||
nbGros := r.NB_GROS;
|
||
nbMale := r.NB_MALE;
|
||
nbFemelle := r.NB_FEMELLE;
|
||
nbLapereauTotal := nbGros + nbMoyen + nbPetit;
|
||
|
||
-- les lapins
|
||
if (mangerLapin = 'F') then
|
||
-- pas nourris => on tue une parties des lapins males (1 au minimun)
|
||
nbMale := nbMale - nbMale * dbms_random.value - 1;
|
||
nbFemelle := nbFemelle - nbFemelle * dbms_random.value - 1;
|
||
end if;
|
||
|
||
-- les lapereaux
|
||
if ((mangerLapereau = 'T') and (boireLapin = 'T')) then
|
||
-- les gros deviennent adultes
|
||
nbLapereauDevenantMal := nbGros * dbms_random.value;
|
||
nbMale := nbMale + nbLapereauDevenantMal;
|
||
nbFemelle := nbFemelle + nbGros - nbLapereauDevenantMal;
|
||
-- les moyens deviennent gros
|
||
nbGros := nbMoyen;
|
||
-- les petits deviennent moyens
|
||
nbMoyen := nbPetit;
|
||
nbPetit := 0;
|
||
elsif (mangerLapereau = 'F') then
|
||
-- des lapereaux meurent (les petits en premiers )
|
||
nbLapereauMourrant := nbLapereauTotal * dbms_random.value;
|
||
nbPetit := nbPetit - nbLapereauMourrant;
|
||
nbLapereauMourrant := nbLapereauMourrant - nbPetit;
|
||
if (nbLapereauMourrant > 0) then
|
||
nbMoyen := nbMoyen - nbLapereauMourrant;
|
||
nbLapereauMourrant := nbLapereauMourrant - nbMoyen;
|
||
if (nbLapereauMourrant > 0) then
|
||
nbGros := nbGros - nbLapereauMourrant;
|
||
nbLapereauMourrant := nbLapereauMourrant - nbGros;
|
||
end if;
|
||
end if;
|
||
end if;
|
||
|
||
-- dans tous les cas, manger et boire deviennent faux...
|
||
boireLapereau := 'F';
|
||
mangerLapereau := 'F';
|
||
boireLapin := 'F';
|
||
mangerLapin := 'F';
|
||
|
||
-- verification final des quantites
|
||
if (nbPetit < 0) then
|
||
nbPetit := 0;
|
||
end if;
|
||
if (nbMoyen < 0) then
|
||
nbMoyen := 0;
|
||
end if;
|
||
if (nbGros < 0) then
|
||
nbGros := 0;
|
||
end if;
|
||
if (nbMale < 0) then
|
||
nbMale := 0;
|
||
end if;
|
||
if (nbFemelle < 0) then
|
||
nbFemelle := 0;
|
||
end if;
|
||
|
||
-- mise a jour de la base
|
||
UPDATE ferme SET NB_MALE = nbMale, NB_FEMELLE = nbFemelle, NB_PETIT = nbPetit, NB_MOYEN = nbMoyen, NB_GROS = nbGros, ABREUVAGE_L = boireLapin, NOURRI_L = mangerLapin, ABREUVAGE_J = boireLapereau, NOURRI_J = mangerLapereau WHERE ID_FERMIER = r.ID_FERMIER;
|
||
end loop;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MAJ_Nourriture AS -- Checked
|
||
BEGIN
|
||
MAJ_Nourriture_Volaille;
|
||
MAJ_Nourriture_Vache;
|
||
MAJ_Nourriture_Lapin;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Changement_d_age AS -- !!! Deja fait ds nourrire
|
||
nb_sexe_masculin ferme.nb_male%type;
|
||
nb_nouveaux_adulte ferme.nb_gros%type;
|
||
CURSOR clapier IS
|
||
SELECT id_fermier,nb_male,nb_femelle,nb_gros,abreuvage_j,nourri_j
|
||
FROM ferme
|
||
WHERE HIBERNATION = 'F';
|
||
lapins clapier%rowtype;
|
||
BEGIN
|
||
-- MAJ de l'age des volailles
|
||
-- les volailles prenent un jour quel que soit leur etat de sante et leur nutrition
|
||
UPDATE volaille SET age_v = age_v + 1 ;
|
||
|
||
-- MAJ de l'age des laperaux
|
||
-- les laperaux prenent un jour seulement si ils ont ete nourris et abreuves, peu importe leur etat de sante
|
||
-- le clapier ne peut contenir plus de 50 individus
|
||
-- la determination du sexe d'un laperau se fait a son passage a l'age adulte par un random
|
||
OPEN clapier ;
|
||
LOOP
|
||
EXIT WHEN clapier%NOTFOUND ;
|
||
FETCH clapier INTO lapins ;
|
||
IF lapins.abreuvage_j='T' and lapins.nourri_j='T'
|
||
THEN
|
||
IF lapins.nb_male + lapins.nb_femelle + lapins.nb_gros <= 50
|
||
THEN
|
||
nb_nouveaux_adulte := lapins.nb_gros ;
|
||
ELSE
|
||
nb_nouveaux_adulte := 50 - (lapins.nb_male + lapins.nb_femelle) ;
|
||
END IF ;
|
||
nb_sexe_masculin := dbms_random.value * nb_nouveaux_adulte ;
|
||
UPDATE ferme SET nb_male = lapins.nb_male + nb_sexe_masculin WHERE id_fermier=lapins.id_fermier ;
|
||
UPDATE ferme SET nb_femelle = lapins.nb_femelle + (nb_nouveaux_adulte - nb_sexe_masculin) WHERE id_fermier=lapins.id_fermier ;
|
||
END IF ;
|
||
END LOOP ;
|
||
CLOSE clapier ;
|
||
UPDATE ferme SET nb_gros = nb_moyen WHERE abreuvage_j='T' and nourri_j='T' ;
|
||
UPDATE ferme SET nb_moyen = nb_petit WHERE abreuvage_j='T' and nourri_j='T' ;
|
||
-- la naissance des plus petits laperaux n'est pas geree ici
|
||
UPDATE ferme SET nb_petit = 0 WHERE abreuvage_j='T' and nourri_j='T' ;
|
||
|
||
-- MAJ de l'age de la vache
|
||
-- la vache prend un jour quel que soit son etat de sante et sa nutrition
|
||
-- lorsqu'une vache meurt, tous les champs la concernant sont passes a NULL
|
||
UPDATE ferme SET age_vache = age_vache + 1 WHERE age_vache IS NOT NULL ;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE score AS -- Checked
|
||
nbre_oeufs_total_vendu integer ;
|
||
nbre_oeufs_vendu integer ;
|
||
nbre_laits_total_vendu integer ;
|
||
nbre_laits_vendu integer ;
|
||
nbre_lapins_total_vendu integer ;
|
||
nbre_lapins_vendu integer ;
|
||
nbre_achat_eleveur integer ;
|
||
nbre_achat_eleveur_total integer ;
|
||
nbre_vente_eleveur integer ;
|
||
nbre_vente_eleveur_total integer ;
|
||
solde integer ;
|
||
solde_total integer ;
|
||
nbre_gens_total integer ;
|
||
score_ integer ;
|
||
classements integer ;
|
||
BEGIN
|
||
-- Initialisation des varibles globales :
|
||
SELECT COUNT(NB_VENDU) into nbre_oeufs_total_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_oeuf ;
|
||
if (nbre_oeufs_total_vendu != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_oeufs_total_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_oeuf ;
|
||
else
|
||
nbre_oeufs_total_vendu := 1;
|
||
end if ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_laits_total_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_lait ;
|
||
if (nbre_laits_total_vendu != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_laits_total_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_lait ;
|
||
else
|
||
nbre_laits_total_vendu := 1;
|
||
end if ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_lapins_total_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle;
|
||
if (nbre_lapins_total_vendu != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_lapins_total_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle;
|
||
else
|
||
nbre_lapins_total_vendu := 1;
|
||
end if ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_vente_eleveur_total FROM a_vendu WHERE not(ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle or ID_ARTICLE = jmeumeu.id_lait or ID_ARTICLE = jmeumeu.id_oeuf) ;
|
||
if (nbre_vente_eleveur_total != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_vente_eleveur_total FROM a_vendu WHERE not(ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle or ID_ARTICLE = jmeumeu.id_lait or ID_ARTICLE = jmeumeu.id_oeuf) ;
|
||
else
|
||
nbre_vente_eleveur_total := 1 ;
|
||
end if ;
|
||
|
||
SELECT SUM(ECUS) into solde_total FROM ferme ;
|
||
SELECT SUM(NB_ACHATS_JOUR) into nbre_achat_eleveur_total FROM ferme WHERE HIBERNATION = 'F';
|
||
SELECT COUNT(*) into nbre_gens_total FROM ferme ;
|
||
|
||
for un_gens in (SELECT ID_FERMIER, ECUS, NB_ACHATS_JOUR FROM ferme WHERE hibernation = 'F') loop
|
||
-- Initialisation des varibles :
|
||
solde := un_gens.ECUS ;
|
||
nbre_achat_eleveur := un_gens.NB_ACHATS_JOUR ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_oeufs_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_oeuf and ID_FERMIER = un_gens.ID_FERMIER ;
|
||
if (nbre_oeufs_vendu != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_oeufs_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_oeuf and ID_FERMIER = un_gens.ID_FERMIER ;
|
||
end if ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_laits_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_lait and ID_FERMIER = un_gens.ID_FERMIER ;
|
||
if (nbre_laits_vendu != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_laits_vendu FROM a_vendu WHERE ID_ARTICLE = jmeumeu.id_lait and ID_FERMIER = un_gens.ID_FERMIER ;
|
||
end if ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_lapins_vendu FROM a_vendu WHERE (ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle) and ID_FERMIER = un_gens.ID_FERMIER ;
|
||
if (nbre_lapins_vendu != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_lapins_vendu FROM a_vendu WHERE (ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle) and ID_FERMIER = un_gens.ID_FERMIER ;
|
||
end if ;
|
||
|
||
SELECT COUNT(NB_VENDU) into nbre_vente_eleveur FROM a_vendu WHERE ID_FERMIER = un_gens.ID_FERMIER and not(ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle or ID_ARTICLE = jmeumeu.id_lait or ID_ARTICLE = jmeumeu.id_oeuf) ;
|
||
if (nbre_vente_eleveur != 0) then
|
||
SELECT SUM(NB_VENDU) into nbre_vente_eleveur FROM a_vendu WHERE ID_FERMIER = un_gens.ID_FERMIER and not(ID_ARTICLE = jmeumeu.id_lapin_male or ID_ARTICLE = jmeumeu.id_lapin_femelle or ID_ARTICLE = jmeumeu.id_lait or ID_ARTICLE = jmeumeu.id_oeuf) ;
|
||
end if ;
|
||
|
||
score_ := (jmeumeu.coeff_achat*(nbre_achat_eleveur/nbre_achat_eleveur_total) + jmeumeu.coeff_vente*(nbre_vente_eleveur/nbre_vente_eleveur_total) + jmeumeu.coeff_oeuf*(nbre_oeufs_vendu/nbre_oeufs_total_vendu) + jmeumeu.coeff_lapin*(nbre_lapins_vendu/nbre_lapins_total_vendu) + jmeumeu.coeff_lait*(nbre_laits_vendu/nbre_laits_total_vendu) + jmeumeu.coeff_solde*(solde/solde_total) )*nbre_gens_total ;
|
||
|
||
UPDATE ferme set score=score_ WHERE id_fermier = un_gens.id_fermier;
|
||
end loop ;
|
||
classements := 1 ;
|
||
for un_gens in (SELECT ID_FERMIER, SCORE FROM ferme ORDER BY SCORE DESC) loop
|
||
UPDATE ferme set CLASSEMENT = classements WHERE ID_FERMIER = un_gens.ID_FERMIER;
|
||
classements := classements + 1 ;
|
||
end loop ;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MAJ_MALADIE AS -- Checked
|
||
--curseur sur les fermiers
|
||
CURSOR FARM IS
|
||
SELECT *
|
||
FROM FERME
|
||
WHERE HIBERNATION = 'F'
|
||
FOR UPDATE;
|
||
--curseur parametre sur les volailles
|
||
CURSOR MALADIE_V(FERMIER FERME.ID_FERMIER%TYPE) IS
|
||
SELECT V.NB_MALADE_V, V.ID_VOLAILLE
|
||
FROM VOLAILLE V,FERME F
|
||
WHERE F.ID_FERMIER = V.ID_FERMIER
|
||
AND V.ID_FERMIER = FERMIER
|
||
FOR UPDATE;
|
||
SEUIL FLOAT;
|
||
BEGIN
|
||
--initialisation
|
||
SEUIL := 0.6;
|
||
|
||
--Parcours des fermes pour les morts...
|
||
FOR UNE_FERME IN FARM
|
||
LOOP
|
||
--mort des volailles
|
||
FOR UNE_VOLAILLE IN MALADIE_V(UNE_FERME.ID_FERMIER)
|
||
LOOP
|
||
IF (UNE_VOLAILLE.NB_MALADE_V = 4)
|
||
THEN
|
||
DELETE FROM VOLAILLE WHERE CURRENT OF MALADIE_V;
|
||
END IF;
|
||
END LOOP;
|
||
|
||
--mort des vaches
|
||
IF (UNE_FERME.NB_MALADE_VACHE = 4)
|
||
THEN
|
||
UPDATE FERME SET POIDS_VACHE = 0 WHERE CURRENT OF FARM ;
|
||
UPDATE FERME SET NB_MALADE_VACHE = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET SALE_VACHE = 'F' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
|
||
--mort des lapins
|
||
IF (UNE_FERME.NB_MALADE_L = 1)
|
||
THEN
|
||
UPDATE FERME SET NB_MALE = NB_MALE - CAST((NB_MALE * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_FEMELLE = NB_FEMELLE - CAST((NB_FEMELLE * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
|
||
IF (UNE_FERME.NB_MALE = 0 AND UNE_FERME.NB_FEMELLE = 0 )
|
||
THEN
|
||
UPDATE FERME SET NB_MALE = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_FEMELLE = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MALADE_L = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET SALE_L = 'F' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mort des lapereaux
|
||
IF (UNE_FERME.NB_MALADE_J = 1)
|
||
THEN
|
||
UPDATE FERME SET NB_GROS = NB_GROS - CAST((NB_GROS * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MOYEN = NB_MOYEN - CAST((NB_MOYEN * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_PETIT = NB_PETIT - CAST((NB_PETIT * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
|
||
IF (UNE_FERME.NB_GROS = 0 AND UNE_FERME.NB_MOYEN = 0 AND UNE_FERME.NB_PETIT = 0)
|
||
THEN
|
||
UPDATE FERME SET NB_GROS = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MOYEN = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_PETIT = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MALADE_J = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET SALE_J = 'F' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
END LOOP;
|
||
|
||
--Parcours des fermes pour la mise a jour des maladies
|
||
FOR UNE_FERME IN FARM
|
||
LOOP
|
||
--mise a jour des volailles
|
||
FOR UNE_VOLAILLE IN MALADIE_V(UNE_FERME.ID_FERMIER)
|
||
LOOP
|
||
IF (UNE_VOLAILLE.NB_MALADE_V = 0)
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE VOLAILLE SET NB_MALADE_V = 1 WHERE CURRENT OF MALADIE_V;
|
||
END IF;
|
||
ELSE
|
||
UPDATE VOLAILLE SET NB_MALADE_V = NB_MALADE_V + 1 WHERE CURRENT OF MALADIE_V;
|
||
END IF;
|
||
END LOOP;
|
||
|
||
--mise a jour des vaches
|
||
IF (UNE_FERME.POIDS_VACHE > 0)
|
||
THEN
|
||
IF (UNE_FERME.NB_MALADE_VACHE = 0)
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE FERME SET NB_MALADE_VACHE = 1 WHERE CURRENT OF FARM;
|
||
END IF;
|
||
ELSE
|
||
UPDATE FERME SET NB_MALADE_VACHE = NB_MALADE_VACHE + 1 WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mise a jour des lapins
|
||
IF (UNE_FERME.NB_MALE > 0 OR UNE_FERME.NB_FEMELLE > 0)
|
||
THEN
|
||
IF (UNE_FERME.NB_MALADE_L = 0)
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE FERME SET NB_MALADE_L = 1 WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mise a jour des lapereaux
|
||
IF (UNE_FERME.NB_GROS > 0 OR UNE_FERME.NB_MOYEN > 0 OR UNE_FERME.NB_PETIT > 0)
|
||
THEN
|
||
IF (UNE_FERME.NB_MALADE_J = 0)
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE FERME SET NB_MALADE_J = 1 WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END LOOP;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MAJ_SALE AS -- Checked
|
||
--curseur sur les fermiers
|
||
CURSOR FARM IS
|
||
SELECT *
|
||
FROM FERME
|
||
WHERE HIBERNATION = 'F'
|
||
FOR UPDATE;
|
||
--curseur parametre sur les volailles
|
||
CURSOR SALE_VOL(FERMIER FERME.ID_FERMIER%TYPE) IS
|
||
SELECT V.NB_MALADE_V
|
||
FROM VOLAILLE V,FERME F
|
||
WHERE F.ID_FERMIER = V.ID_FERMIER
|
||
AND V.ID_FERMIER = FERMIER
|
||
AND V.SALE_V = 'F'
|
||
FOR UPDATE;
|
||
SEUIL FLOAT;
|
||
BEGIN
|
||
--initialisation
|
||
SEUIL := 0.4;
|
||
FOR UNE_FERME IN FARM
|
||
LOOP
|
||
--Mort des lapins et laperaux
|
||
--mort des lapins
|
||
IF (UNE_FERME.SALE_L = 'T')
|
||
THEN
|
||
UPDATE FERME SET NB_MALE = NB_MALE - CAST((NB_MALE * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_FEMELLE = NB_FEMELLE - CAST((NB_FEMELLE * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
|
||
IF (UNE_FERME.NB_MALE = 0 AND UNE_FERME.NB_FEMELLE = 0)
|
||
THEN
|
||
UPDATE FERME SET NB_MALE = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_FEMELLE = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MALADE_L = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET SALE_L = 'F' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mort des lapereaux
|
||
IF (UNE_FERME.SALE_J = 'T')
|
||
THEN
|
||
UPDATE FERME SET NB_GROS = NB_GROS - CAST((NB_GROS * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MOYEN = NB_MOYEN - CAST((NB_MOYEN * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_PETIT = NB_PETIT - CAST((NB_PETIT * dbms_random.value) AS INTEGER) WHERE CURRENT OF FARM;
|
||
|
||
IF (UNE_FERME.NB_GROS = 0 AND UNE_FERME.NB_MOYEN = 0 AND UNE_FERME.NB_PETIT = 0)
|
||
THEN
|
||
UPDATE FERME SET NB_GROS = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MOYEN = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_PETIT = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET NB_MALADE_J = 0 WHERE CURRENT OF FARM;
|
||
UPDATE FERME SET SALE_J = 'F' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mise a jour des volailles
|
||
FOR UNE_VOLAILLE IN SALE_VOL(UNE_FERME.ID_FERMIER)
|
||
LOOP
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE VOLAILLE SET SALE_V = 'T' WHERE CURRENT OF SALE_VOL;
|
||
END IF;
|
||
END LOOP;
|
||
|
||
--mise a jour des vaches
|
||
IF (UNE_FERME.POIDS_VACHE > 0)
|
||
THEN
|
||
IF (UNE_FERME.SALE_VACHE = 'F')
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE FERME SET SALE_VACHE = 'T' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mise a jour des lapins
|
||
IF (UNE_FERME.NB_MALE > 0 OR UNE_FERME.NB_FEMELLE > 0)
|
||
THEN
|
||
IF (UNE_FERME.SALE_L = 'F')
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE FERME SET SALE_L = 'T' WHERE ID_FERMIER LIKE UNE_FERME.ID_FERMIER;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
--mise a jour des lapereaux
|
||
IF (UNE_FERME.NB_GROS > 0 OR UNE_FERME.NB_MOYEN > 0 OR UNE_FERME.NB_PETIT > 0)
|
||
THEN
|
||
IF (UNE_FERME.SALE_J = 'F')
|
||
THEN
|
||
IF (dbms_random.value>SEUIL)
|
||
THEN
|
||
UPDATE FERME SET SALE_J = 'T' WHERE CURRENT OF FARM;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END LOOP;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MAJ_GLOBALE AS -- Checked
|
||
CURSOR FERMIERS IS
|
||
SELECT ID_FERMIER
|
||
FROM FERME
|
||
WHERE HIBERNATION = 'F'
|
||
FOR UPDATE;
|
||
CURSOR VOLAILLES_DE(FERMIER FERME.ID_FERMIER%TYPE) IS
|
||
SELECT ID_VOLAILLE
|
||
FROM VOLAILLE
|
||
WHERE ID_FERMIER = FERMIER
|
||
FOR UPDATE;
|
||
BEGIN
|
||
FOR FERMIER IN FERMIERS LOOP
|
||
FOR VOLAILLE IN VOLAILLES_DE(FERMIER.ID_FERMIER) LOOP
|
||
Creation_oeuf(VOLAILLE.ID_VOLAILLE,FERMIER.ID_FERMIER); -- Ponte des poules
|
||
END LOOP;
|
||
Creation_lait(FERMIER.ID_FERMIER); -- Remplissage du pis des vaches
|
||
END LOOP;
|
||
|
||
MAJ_Nourriture(); -- Mise <20> jour des animaux nourris
|
||
MAJ_MALADIE(); -- Mise <20> jour des animaux malades
|
||
MAJ_SALE(); -- Mise <20> jour des animaux sales
|
||
Changement_d_age(); -- Changement d'<27>ge des animaux si besoin est
|
||
score(); -- Mise <20> jour des scores
|
||
Naissance_Lapins(); -- Naissance des jolis petits lapinous
|
||
Mise_A_JourCoop(); -- Remplissage de la coop<6F>rative
|
||
Hiberner(); -- Hibernation automatique au bout de 3 jours
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Mise_A_JourCoop AS -- Checked
|
||
nb_fermier INTEGER ;
|
||
facteur_mul INTEGER ;
|
||
BEGIN
|
||
-- la cooperative possede un stock adapte au nombre de fermier
|
||
SELECT count(*) INTO nb_fermier FROM ferme ;
|
||
-- on augmente d'une quantite tous les 20 fermiers
|
||
facteur_mul := nb_fermier / 20 + 1 ;
|
||
-- reinitialisation du nombre de sac de nourriture
|
||
UPDATE article SET quantite = jmeumeu.qte_sac_de_graine * facteur_mul WHERE id_article = jmeumeu.id_sac_de_graine ;
|
||
-- reinitialisation du nombre de seau d'eau
|
||
UPDATE article SET quantite = jmeumeu.qte_seau_d_eau * facteur_mul WHERE id_article = jmeumeu.id_seau_d_eau ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_seringue * facteur_mul WHERE id_article = jmeumeu.id_seringue ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_botte_de_paille * facteur_mul WHERE id_article = jmeumeu.id_botte_de_paille ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_poussin_male * facteur_mul WHERE id_article = jmeumeu.id_poussin_male ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_poussin_femelle * facteur_mul WHERE id_article = jmeumeu.id_poussin_femelle ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_coq * facteur_mul WHERE id_article = jmeumeu.id_coq ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_poule * facteur_mul WHERE id_article = jmeumeu.id_poule ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_lapin_male * facteur_mul WHERE id_article = jmeumeu.id_lapin_male ;
|
||
-- reinitialisation du nombre de
|
||
UPDATE article SET quantite = jmeumeu.qte_lapin_femelle * facteur_mul WHERE id_article = jmeumeu.id_lapin_femelle ;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
-- Groupe 2 CHECKED
|
||
CREATE OR REPLACE PROCEDURE Ajouter_a_collection -- Checked
|
||
(
|
||
fermier ENTREPOSE.ID_FERMIER%type,
|
||
id ENTREPOSE.ID_ARTICLE%type,
|
||
nb ENTREPOSE.QUANTITE%type
|
||
) AS
|
||
boolCollect ARTICLE.collectionnable%TYPE;
|
||
BEGIN
|
||
SELECT collectionnable into boolCollect FROM ARTICLE WHERE id_article = id;
|
||
IF (boolCollect = 'T')
|
||
THEN
|
||
INSERT INTO ENTREPOSE(ENTREPOSE.id_fermier,ENTREPOSE.id_article,ENTREPOSE.quantite,ENTREPOSE.collection) VALUES(fermier,id,nb,'T');
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20112,'Article non collectionnable');
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Vente_article_remise -- Checked
|
||
(
|
||
fermier MARCHE_VEND.ID_FERMIER%type,
|
||
id ARTICLE.ID_ARTICLE%type,
|
||
nb MARCHE_VEND.NB_VENTE%type,
|
||
prix MARCHE_VEND.prix%type
|
||
) AS
|
||
dispo ENTREPOSE.quantite%type;
|
||
nb_rest ENTREPOSE.quantite%type;
|
||
BEGIN
|
||
SELECT quantite INTO dispo FROM ENTREPOSE WHERE ENTREPOSE.id_article = id;
|
||
IF dispo >= nb
|
||
THEN
|
||
nb_rest := dispo - nb ;
|
||
UPDATE MARCHE_VEND set MARCHE_VEND.nb_vente = nb_rest WHERE id = MARCHE_VEND.id_article ;
|
||
INSERT INTO MARCHE_VEND(MARCHE_VEND.id_fermier,MARCHE_VEND.id_article,MARCHE_VEND.nb_vente,MARCHE_VEND.prix) VALUES(fermier,id,nb,prix);
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20113,'Trop d`articles vendus');
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Acheter_articleM -- Checked
|
||
(
|
||
id_fer FERME.ID_FERMIER%type,
|
||
id_art ARTICLE.ID_ARTICLE%type,
|
||
quant INTEGER
|
||
) AS
|
||
fermier FERME%rowtype;
|
||
prod A_VENDU%rowtype;
|
||
prod_E ENTREPOSE%rowtype;
|
||
produit MARCHE_VEND%rowtype;
|
||
produit_M MARCHE_VEND%rowtype;
|
||
nb_achat FERME.NB_ACHATS_JOUR%type;
|
||
age VOLAILLE.AGE_V%type;
|
||
prix ARTICLE.PRIX_ACHAT%type;
|
||
vente integer := 0;
|
||
tmp integer;
|
||
droit boolean;
|
||
fait integer;
|
||
cursor prods IS
|
||
SELECT * FROM A_VENDU WHERE id_fer = A_VENDU.ID_FERMIER;
|
||
cursor produits IS
|
||
SELECT * FROM MARCHE_VEND WHERE id_art = MARCHE_VEND.ID_ARTICLE;
|
||
BEGIN
|
||
SELECT * INTO fermier FROM FERME WHERE id_fer = FERME.ID_FERMIER;
|
||
droit := FALSE;
|
||
IF(fermier.NB_ACHATS_JOUR < 1)
|
||
THEN
|
||
IF(fermier.NB_ACHATS_JOUR + quant <= 12)
|
||
THEN
|
||
droit := TRUE;
|
||
END IF;
|
||
END IF;
|
||
-- si l'article est mis en vente au march<63> avec la quantit<69> demand<6E>e
|
||
SELECT SUM(NB_VENTE) INTO vente FROM MARCHE_VEND WHERE id_art = MARCHE_VEND.ID_ARTICLE;
|
||
IF (vente >= quant)
|
||
THEN
|
||
-- Ajouter
|
||
IF(droit)
|
||
THEN
|
||
-- Si le fermier a assez d'argent pour acheter
|
||
SELECT PRIX_ACHAT INTO prix FROM ARTICLE WHERE id_art = ARTICLE.ID_ARTICLE;
|
||
IF(fermier.ECUS >= quant*prix)
|
||
THEN
|
||
-- Recherche du fermier qui vent ses produits avec le prix le moins cher
|
||
WHILE (fait<quant) LOOP
|
||
OPEN produits;
|
||
FETCH produits INTO produit_M;
|
||
LOOP
|
||
FETCH produits INTO produit;
|
||
IF (produit.PRIX < produit_M.PRIX)
|
||
THEN
|
||
produit_M.ID_FERMIER := produit.ID_FERMIER;
|
||
produit_M.NB_VENTE := produit.NB_VENTE;
|
||
produit_M.PRIX := produit.PRIX;
|
||
END IF;
|
||
exit when produits%NOTFOUND;
|
||
END LOOP;
|
||
CLOSE produits;
|
||
-- Si ce fermier seul satisfait la demande
|
||
IF (produit_M.NB_VENTE >= quant)
|
||
THEN
|
||
IF(produit_M.NB_VENTE = quant)
|
||
THEN --offre==demande => supp du vendeur de cette categorie
|
||
DELETE FROM MARCHE_VEND WHERE id_art = MARCHE_VEND.ID_ARTICLE and produit_M.ID_FERMIER = MARCHE_VEND.ID_FERMIER;
|
||
ELSE --offre > demande => mis a jour
|
||
UPDATE MARCHE_VEND set MARCHE_VEND.NB_VENTE = MARCHE_VEND.NB_VENTE-quant WHERE id_art=MARCHE_VEND.ID_ARTICLE and produit_M.ID_FERMIER = MARCHE_VEND.ID_FERMIER;
|
||
END IF;
|
||
-- MaJ Compte Bancaire
|
||
UPDATE FERME set FERME.ECUS=FERME.ECUS+(quant*prix) WHERE FERME.ID_FERMIER=produit_M.ID_FERMIER;
|
||
UPDATE FERME set FERME.ECUS=FERME.ECUS-(quant*prix) WHERE FERME.ID_FERMIER=id_fer;
|
||
-- VerIFier si on a deja d'autres articles du mm type
|
||
SELECT count(ID_ARTICLE) INTO tmp FROM ENTREPOSE WHERE id_fer=ENTREPOSE.ID_FERMIER and id_art=ENTREPOSE.ID_ARTICLE;
|
||
IF(tmp = 0)
|
||
THEN
|
||
INSERT INTO ENTREPOSE values(id_fer, id_art, quant, 'F');
|
||
ELSE
|
||
UPDATE ENTREPOSE set ENTREPOSE.QUANTITE=ENTREPOSE.QUANTITE+quant WHERE id_art=ENTREPOSE.ID_ARTICLE and produit_M.ID_FERMIER = ENTREPOSE.ID_FERMIER;
|
||
END IF;
|
||
-- Idem pr Vendeur
|
||
SELECT count(ID_ARTICLE) INTO tmp FROM A_VENDU WHERE id_fer=A_VENDU.ID_FERMIER and id_art=A_VENDU.ID_ARTICLE;
|
||
IF(tmp = 0)
|
||
THEN
|
||
INSERT INTO A_VENDU values(id_fer, id_art, quant, CURRENT_DATE);
|
||
ELSE
|
||
UPDATE A_VENDU set A_VENDU.NB_VENDU=A_VENDU.NB_VENDU+quant, DATE_VENTE=CURRENT_DATE WHERE id_art=A_VENDU.ID_ARTICLE and produit_M.ID_FERMIER = A_VENDU.ID_FERMIER;
|
||
END IF;
|
||
fait := quant;
|
||
ELSE --ce fermier seul ne satisfait pas la demande
|
||
DELETE FROM MARCHE_VEND WHERE id_art=MARCHE_VEND.ID_ARTICLE and produit_M.ID_FERMIER = MARCHE_VEND.ID_FERMIER;
|
||
UPDATE FERME set FERME.ECUS=FERME.ECUS+(produit_M.NB_VENTE*prix) WHERE FERME.ID_FERMIER=produit_M.ID_FERMIER;
|
||
UPDATE FERME set FERME.ECUS=FERME.ECUS-(produit_M.NB_VENTE*prix) WHERE FERME.ID_FERMIER=id_fer;
|
||
SELECT count(ID_ARTICLE) INTO tmp FROM ENTREPOSE WHERE id_fer=ENTREPOSE.ID_FERMIER and id_art=ENTREPOSE.ID_ARTICLE;
|
||
IF(tmp = 0)
|
||
THEN
|
||
INSERT INTO ENTREPOSE values(id_fer, id_art, produit_M.NB_VENTE, 'F');
|
||
ELSE
|
||
UPDATE ENTREPOSE set ENTREPOSE.QUANTITE=ENTREPOSE.QUANTITE+produit_M.NB_VENTE WHERE id_art=ENTREPOSE.ID_ARTICLE and produit_M.ID_FERMIER = ENTREPOSE.ID_FERMIER;
|
||
END IF;
|
||
SELECT count(ID_ARTICLE) INTO tmp FROM A_VENDU WHERE id_fer=A_VENDU.ID_FERMIER and id_art=A_VENDU.ID_ARTICLE;
|
||
IF(tmp = 0)
|
||
THEN
|
||
INSERT INTO A_VENDU values(id_fer, id_art, produit_M.NB_VENTE, CURRENT_DATE);
|
||
ELSE
|
||
UPDATE A_VENDU set A_VENDU.NB_VENDU=A_VENDU.NB_VENDU+produit_M.NB_VENTE, DATE_VENTE=CURRENT_DATE WHERE id_art=A_VENDU.ID_ARTICLE and produit_M.ID_FERMIER = A_VENDU.ID_FERMIER;
|
||
END IF;
|
||
fait := produit_M.NB_VENTE;
|
||
END IF;
|
||
END loop;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20114,'Vous n`avez pas les droits necessaires');
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20113,'Trop d`articles vendus');
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Acheter_articleC -- Checked
|
||
(
|
||
idfermier FERME.ID_FERMIER%type,
|
||
idarticle article.id_article%type,
|
||
quantite INTEGER
|
||
) AS
|
||
ferm FERME%rowtype ;
|
||
stock ENTREPOSE%rowtype ;
|
||
coop ARTICLE%rowtype ;
|
||
vente A_VENDU%rowtype ;
|
||
achat MARCHE_VEND%rowtype;
|
||
Cursor curVente IS
|
||
SELECT * FROM a_vendu WHERE a_vendu.id_fermier = idfermier;
|
||
Cursor curAchat IS
|
||
SELECT * FROM marche_vend WHERE marche_vend.id_fermier = idfermier;
|
||
nbMaxAchat FERME.NB_ACHATS_JOUR%type;
|
||
solde FERME.ECUS%type;
|
||
quant ARTICLE.QUANTITE%type;
|
||
fermQuant ARTICLE.QUANTITE%type;
|
||
prix ARTICLE.PRIX_VENTE%type;
|
||
prixTotal integer;
|
||
noHeure number;
|
||
dateActu date;
|
||
jour varchar(20) ;
|
||
heure varchar(20);
|
||
ouverte number;
|
||
nbPoules number ;
|
||
nbLapins number;
|
||
nbVendus number;
|
||
nbLitres number ;
|
||
nbAchats number ;
|
||
animaux number ;
|
||
ageV number;
|
||
nbLF number;
|
||
nbLM number;
|
||
BEGIN
|
||
SELECT * INTO ferm FROM FERME WHERE idfermier = FERME.ID_FERMIER;
|
||
SELECT * INTO coop FROM article WHERE ARTICLE.id_article = idarticle;
|
||
SELECT * INTO stock FROM entrepose WHERE ENTREPOSE.id_fermier = idfermier and id_article= idarticle;
|
||
|
||
nbMaxAchat := ferm.NB_ACHATS_JOUR;
|
||
solde := ferm.ECUS;
|
||
quant := coop.QUANTITE;
|
||
prix := coop.PRIX_VENTE;
|
||
prixTotal := prix*quantite;
|
||
-- Nb Lapins
|
||
nbLapins := ferm.NB_MALE + ferm.NB_FEMELLE ;
|
||
-- Compter le nb d'achats
|
||
nbAchats := 0;
|
||
FOR achat IN curAchat
|
||
LOOP
|
||
nbAchats := nbAchats + achat.nb_vente ;
|
||
END LOOP;
|
||
-- Variables pour gerer les ouvertures et fermetures de la coop
|
||
SELECT current_date INTO dateActu FROM dual;
|
||
heure := TO_CHAR(dateActu,'HH24');
|
||
jour := TO_CHAR(dateActu,'DY');
|
||
noHeure := TO_NUMBER(heure);
|
||
|
||
-- Coop ouverte ?
|
||
IF((jour = 'SAM.') or (jour = 'DIM.'))
|
||
THEN
|
||
IF(((noHeure >= 9) and (noHeure < 14)) or (noHeure > 19) or (noHeure < 3))
|
||
THEN
|
||
ouverte := 1;
|
||
ELSE
|
||
ouverte := 0;
|
||
END IF ;
|
||
ELSE
|
||
IF (((noHeure >= 5) and (noHeure < 14)) or ((noHeure >= 17) and (noHeure<20)) or(noHeure >= 22)or(noHeure < 3))
|
||
THEN
|
||
ouverte := 1;
|
||
ELSE
|
||
ouverte := 0;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Si coop ouverte
|
||
IF(ouverte = 1)
|
||
THEN
|
||
-- Achats encore possibles
|
||
IF (nbMaxAchat > quantite)
|
||
THEN
|
||
-- Article en stock
|
||
IF (quantite < quant)
|
||
THEN
|
||
-- Assez d'argent
|
||
IF(solde > prixTotal)
|
||
THEN
|
||
-- mise a jour des donnees
|
||
solde := solde - prixTotal ;
|
||
UPDATE FERME set FERME.ECUS = solde WHERE id_fermier = idfermier;
|
||
quant := quant - quantite ;
|
||
UPDATE ARTICLE set ARTICLE.QUANTITE = quant WHERE id_article = idarticle;
|
||
nbMaxAchat := nbMaxAchat - quantite;
|
||
UPDATE FERME set FERME.NB_ACHATS_JOUR = nbMaxAchat WHERE FERME.ID_FERMIER = idfermier;
|
||
SELECT count(ID_ARTICLE) INTO fermQuant FROM ENTREPOSE WHERE ENTREPOSE.ID_FERMIER = idfermier and ENTREPOSE.ID_ARTICLE= idarticle;
|
||
-- Nb ds entrepot
|
||
IF(fermQuant = 0)
|
||
THEN
|
||
INSERT INTO ENTREPOSE values(idfermier, idarticle, quantite, 'F');
|
||
-- gestion des poules et des coqs
|
||
IF((idarticle = jmeumeu.id_coq) or (idarticle = jmeumeu.id_poule))
|
||
THEN
|
||
SELECT count(AGE_V) INTO ageV FROM VOLAILLE WHERE VOLAILLE.ID_FERMIER =idfermier and VOLAILLE.ID_VOLAILLE =idarticle;
|
||
IF(ageV = 0)
|
||
THEN
|
||
INSERT INTO VOLAILLE values(idarticle,idfermier,'F',0,'F',0,'F',0,2.5,4,0);
|
||
END IF;
|
||
ELSE
|
||
-- gestion des lapins et lapines
|
||
IF((idarticle = jmeumeu.id_lapin_male) or (idarticle = jmeumeu.id_lapin_femelle))
|
||
THEN
|
||
IF(idarticle = jmeumeu.id_lapin_male)
|
||
THEN
|
||
UPDATE FERME set FERME.NB_MALE = quantite WHERE FERME.ID_FERMIER = idfermier;
|
||
ELSE
|
||
UPDATE FERME set FERME.NB_FEMELLE = quantite WHERE FERME.ID_FERMIER = idfermier;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- gestion generale des poules et coqs
|
||
IF((idarticle = jmeumeu.id_coq) or (idarticle = jmeumeu.id_poule) or (idarticle = jmeumeu.id_poussin_male) or (idarticle = jmeumeu.id_poussin_femelle))
|
||
THEN
|
||
IF((fermQuant + quantite) > 60)
|
||
THEN
|
||
RAISE_APPLICATION_ERROR(-20227,'Capacite maximale atteinte');
|
||
END IF;
|
||
ELSE
|
||
-- gestion generale des lapins et lapines
|
||
IF(((idarticle =jmeumeu.id_lapin_male) or (idarticle = jmeumeu.id_lapin_femelle)) and ((nbLapins+quantite)<40))
|
||
THEN
|
||
IF(idarticle = jmeumeu.id_lapin_male)
|
||
THEN
|
||
SELECT NB_MALE INTO nbLM FROM FERME WHERE FERME.ID_FERMIER =idfermier ;
|
||
nbLM := nbLM +quantite ;
|
||
UPDATE FERME set FERME.NB_MALE = nbLM WHERE FERME.ID_FERMIER = idfermier;
|
||
ELSE
|
||
SELECT NB_FEMELLE INTO nbLF FROM FERME WHERE FERME.ID_FERMIER =idfermier ;
|
||
nbLF := nbLF +quantite ;
|
||
UPDATE FERME set FERME.NB_FEMELLE = nbLF WHERE FERME.ID_FERMIER = idfermier;
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20227,'Capacite maximale atteinte');
|
||
END IF;
|
||
END IF;
|
||
-- Gestion stock
|
||
fermQuant := stock.QUANTITE;
|
||
fermQuant := fermQuant + quantite ;
|
||
UPDATE ENTREPOSE set ENTREPOSE.QUANTITE = fermQuant WHERE id_fermier = idfermier and id_article= idarticle;
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20113,'Trop d`articles vendus');
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20115,'Depassement de la limite de ventes/achats par jour');
|
||
END IF;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20116,'Coop ferme');
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
-- Groupe 3 CHECKED
|
||
CREATE OR REPLACE PROCEDURE nourrir_clapier -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
young boolean
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
nourrij ferme.nourri_j%type;
|
||
nourril ferme.nourri_l%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
nb_ecus := nb_ecus - 5;
|
||
if nb_ecus < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
if young then
|
||
SELECT nourri_j into nourrij FROM ferme WHERE idfermier = id_fermier;
|
||
if nourrij = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20222,'Animaux deja nourris');
|
||
else
|
||
UPDATE ferme set nourri_j = 'T' WHERE idfermier = id_fermier;
|
||
end if;
|
||
else
|
||
SELECT nourri_l into nourril from ferme WHERE idfermier = id_fermier;
|
||
if nourril = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20222,'Animaux deja nourris');
|
||
else
|
||
UPDATE ferme set nourri_l = 'T' WHERE idfermier = id_fermier;
|
||
end if;
|
||
end if;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE abreuver_clapier -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
young boolean
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
abreuvagej ferme.abreuvage_j%type;
|
||
abreuvagel ferme.abreuvage_l%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
nb_ecus := nb_ecus - 2;
|
||
if nb_ecus < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
if young then
|
||
SELECT abreuvage_j into abreuvagej FROM ferme WHERE idfermier = id_fermier;
|
||
if abreuvagej = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20223,'Animaux deja abreuves');
|
||
else
|
||
UPDATE ferme set abreuvage_j = 'T' WHERE idfermier = id_fermier;
|
||
end if;
|
||
else
|
||
SELECT abreuvage_l into abreuvagel FROM ferme WHERE idfermier = id_fermier;
|
||
if abreuvagel = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20223,'Animaux deja abreuves');
|
||
else
|
||
UPDATE ferme set abreuvage_l = 'T' WHERE idfermier = id_fermier;
|
||
end if;
|
||
end if;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE nettoyer_clapier -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
young boolean
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
nb_ecus := nb_ecus - 3;
|
||
if nb_ecus < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
if young then
|
||
UPDATE ferme set sale_j = 'F' WHERE idfermier = id_fermier;
|
||
else
|
||
UPDATE ferme set sale_l = 'F' WHERE idfermier = id_fermier;
|
||
end if;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE soigner_clapier -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
young boolean
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
nb_ecus := nb_ecus - 6;
|
||
if nb_ecus < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
if young then
|
||
UPDATE ferme set nb_malade_j = 0 WHERE idfermier = id_fermier;
|
||
else
|
||
UPDATE ferme set nb_malade_l = 0 WHERE idfermier = id_fermier;
|
||
end if;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE vendre_lapins -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
male boolean,
|
||
nb integer
|
||
) AS
|
||
nb_lapins integer;
|
||
BEGIN
|
||
if male then
|
||
SELECT nb_male into nb_lapins FROM ferme WHERE idfermier=id_fermier;
|
||
nb_lapins := nb_lapins - nb;
|
||
if nb_lapins < 0 then
|
||
RAISE_APPLICATION_ERROR(-20224,'Pas assez d`animaux');
|
||
end if;
|
||
UPDATE ferme set nb_male = nb_lapins WHERE idfermier=id_fermier;
|
||
INSERT INTO a_vendu VALUES (idfermier,jmeumeu.id_lapin_male,nb,CURRENT_DATE);
|
||
else
|
||
SELECT nb_femelle into nb_lapins FROM ferme WHERE idfermier=id_fermier;
|
||
nb_lapins := nb_lapins - nb;
|
||
if nb_lapins < 0 then
|
||
RAISE_APPLICATION_ERROR(-20224,'Pas assez d`animaux');
|
||
end if;
|
||
UPDATE ferme set nb_femelle = nb_lapins WHERE idfermier=id_fermier;
|
||
INSERT INTO a_vendu VALUES (idfermier,jmeumeu.id_lapin_femelle,nb,CURRENT_DATE);
|
||
end if;
|
||
UPDATE ferme set ecus=ecus+25*nb WHERE idfermier=id_fermier;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE naissance_lapins AS -- Checked
|
||
nb_naissances integer;
|
||
surplus integer;
|
||
BEGIN
|
||
for r in (SELECT id_fermier, nb_male, nb_femelle, nb_moyen, nb_gros FROM ferme WHERE hibernation = 'F' and nb_male > 0 and nb_femelle > 0 and nb_moyen + nb_gros < 50) loop
|
||
if r.nb_male < r.nb_femelle then
|
||
nb_naissances := r.nb_male * (7/9);
|
||
else
|
||
nb_naissances := r.nb_femelle * (7/9);
|
||
end if;
|
||
surplus := nb_naissances + r.nb_moyen + r.nb_gros - 50;
|
||
if surplus > 0 then
|
||
nb_naissances := nb_naissances - surplus;
|
||
end if;
|
||
UPDATE ferme set nb_petit=nb_naissances WHERE id_fermier = r.id_fermier;
|
||
end loop;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION aff_clapier -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type
|
||
)
|
||
RETURN sys_refcursor
|
||
AS
|
||
curseur sys_refcursor;
|
||
BEGIN
|
||
OPEN curseur FOR
|
||
SELECT nb_male,nb_femelle,nb_petit,nb_moyen,nb_gros,abreuvage_l,nb_abreuvage_l,nourri_l,nb_jeune_l,sale_l,nb_malade_l,abreuvage_j,nb_abreuvage_j,nourri_j,nb_jeune_j,sale_j,nb_malade_j
|
||
FROM ferme WHERE id_fermier=idfermier;
|
||
return curseur;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION aff_remise -- Checked
|
||
(
|
||
idfermier entrepose.id_fermier%type
|
||
)
|
||
RETURN sys_refcursor
|
||
AS
|
||
curseur sys_refcursor;
|
||
BEGIN
|
||
OPEN curseur FOR
|
||
SELECT article.id_article,nom,description,collectionnable,article.quantite,prix_vente,prix_achat,entrepose.quantite
|
||
FROM entrepose,article WHERE id_fermier=idfermier and collection = 'F' and entrepose.id_article=article.id_article;
|
||
return curseur;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
-- Groupe 4 CHECKED
|
||
CREATE OR REPLACE PROCEDURE Creation_Compte -- Checked
|
||
(
|
||
login FERME.ID_FERMIER%type,
|
||
nom FERME.NOM%type,
|
||
pwd FERME.MDP%type,
|
||
email FERME.MAIL%type
|
||
) AS
|
||
BEGIN
|
||
INSERT INTO FERME VALUES (login,nom,pwd,email,CURRENT_DATE,CURRENT_DATE,1500,0,NULL,'F',0,0,0,0,0,8,'F',0,'F',0,'F',0,'F', 0,'F',0,'F',0,'F',0,'F',0,'F',0,0,0,0);
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001,'Login deja utilisee');
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Suppression_Compte -- Checked
|
||
(
|
||
login FERME.ID_FERMIER%type
|
||
) AS
|
||
BEGIN
|
||
DELETE FROM FERME WHERE login = Ferme.id_fermier ;
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20002,'Compte Inexistant');
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Hiberner AS -- Checked
|
||
x number := 0 ;
|
||
BEGIN
|
||
for uneFerme in(SELECT date_connection,id_fermier FROM ferme) loop
|
||
x := trunc(CURRENT_DATE) - trunc(UneFerme.date_connection) ;
|
||
if (x > 3) then
|
||
UPDATE Ferme set Hibernation = 'T' WHERE id_fermier = uneFerme.id_fermier;
|
||
elsif x > 50 then
|
||
Suppression_Compte(uneFerme.id_fermier);
|
||
end if ;
|
||
end loop;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION Aff_poulailler -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type
|
||
)
|
||
RETURN SYS_REFCURSOR
|
||
AS
|
||
curseur SYS_REFCURSOR;
|
||
BEGIN
|
||
OPEN curseur FOR
|
||
SELECT id_volaille,abreuvage_v,nourri_v,sale_v,nb_malade_v,production_v
|
||
FROM Volaille WHERE id_fermier=idfermier;
|
||
RETURN curseur;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION Aff_Collection -- Checked
|
||
(
|
||
idfermier Ferme.id_fermier%type
|
||
)
|
||
RETURN SYS_REFCURSOR
|
||
AS
|
||
curseur SYS_REFCURSOR;
|
||
BEGIN
|
||
OPEN curseur FOR
|
||
SELECT e.ID_ARTICLE, NOM, DESCRIPTION, e.QUANTITE
|
||
FROM ENTREPOSE e, ARTICLE a WHERE idfermier = e.id_fermier and e.id_article = a.id_article and a.collectionnable = 'T' ;
|
||
RETURN curseur;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE Connection -- Checked
|
||
(
|
||
login Ferme.id_fermier%type,
|
||
motdepasse Ferme.mdp%type
|
||
) AS
|
||
BEGIN
|
||
UPDATE Ferme set date_connection = CURRENT_DATE, Hibernation = 'F' WHERE login = id_fermier and motdepasse = mdp;
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20003,'Connexion Impossible');
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
-- Groupe 5 CHECKED
|
||
CREATE OR REPLACE PROCEDURE vendre_oeufs -- Checked
|
||
(
|
||
volaile volaille.id_volaille%type,
|
||
fermier ferme.id_fermier%type
|
||
) AS
|
||
nb_oeufs volaille.production_v%type;
|
||
nb_ecus ferme.ecus%type;
|
||
BEGIN
|
||
SELECT PRODUCTION_V INTO nb_oeufs FROM Volaille WHERE id_fermier=fermier and id_volaille=volaile;
|
||
IF nb_oeufs > 0 THEN
|
||
SELECT ecus INTO nb_ecus FROM Ferme WHERE id_fermier=fermier;
|
||
UPDATE Ferme SET ECUS=nb_ecus+nb_oeufs*8 WHERE id_fermier=fermier;
|
||
UPDATE Volaille SET PRODUCTION_V=0 WHERE id_fermier=fermier and id_volaille=volaile;
|
||
ELSE
|
||
RAISE_APPLICATION_ERROR(-20333,'Aucun oeuf');
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE abreuver_volaille -- Checked
|
||
(
|
||
idvolaille volaille.id_volaille%type,
|
||
idfermier ferme.id_fermier%type
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
abreuvage volaille.abreuvage_v%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
nb_ecus := nb_ecus - 1;
|
||
if nb_ecus < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
SELECT abreuvage_v into abreuvage FROM volaille WHERE idfermier = id_fermier and idvolaille = id_volaille;
|
||
if abreuvage = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20223,'Animaux deja abreuves');
|
||
else
|
||
UPDATE volaille set abreuvage_v = 'T' WHERE idfermier = id_fermier and idvolaille = id_volaille;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE nourrir_volaille -- Checked
|
||
(
|
||
idvolaille volaille.id_volaille%type,
|
||
idfermier ferme.id_fermier%type
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
nourri volaille.nourri_v%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
nb_ecus := nb_ecus - 3;
|
||
if nb_ecus < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
SELECT nourri_v into nourri FROM volaille WHERE idfermier = id_fermier and idvolaille = id_volaille;
|
||
if nourri = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20222,'Animaux deja nourris');
|
||
else
|
||
UPDATE volaille set nourri_v = 'T' WHERE idfermier = id_fermier and idvolaille = id_volaille;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE or REPLACE PROCEDURE nettoyage_volaille -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
idvolaille volaille.id_volaille%type
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
sale volaille.SALE_V%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE id_fermier = idfermier;
|
||
SELECT sale_v into sale FROM volaille WHERE id_fermier = idfermier and id_volaille = idvolaille;
|
||
IF sale = 'T' THEN
|
||
IF nb_ecus < 3 THEN
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
ELSE
|
||
nb_ecus := nb_ecus - 3;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
UPDATE volaille set sale_v = 'F' WHERE id_fermier = idfermier and id_volaille = idvolaille;
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE or REPLACE PROCEDURE soin_volaille -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type,
|
||
idvolaille volaille.id_volaille%type
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
nb_malade volaille.NB_MALADE_V%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE id_fermier = idfermier;
|
||
SELECT nb_malade_v into nb_malade FROM volaille WHERE id_fermier = idfermier and id_volaille = idvolaille;
|
||
IF (nb_malade > 0 and nb_malade < 4) THEN
|
||
IF nb_ecus < 6 THEN
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
ELSE
|
||
nb_ecus := nb_ecus - 6;
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = idfermier;
|
||
UPDATE volaille set nb_malade_v = 0 WHERE id_fermier = idfermier and id_volaille = idvolaille;
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE or REPLACE PROCEDURE creation_oeuf -- Checked
|
||
(
|
||
volaile volaille.id_volaille%type,
|
||
fermier ferme.id_fermier%type
|
||
) AS
|
||
poids volaille.poids_v%type;
|
||
age volaille.age_v%type;
|
||
sale volaille.sale_v%type;
|
||
malade volaille.nb_malade_v%type;
|
||
rnd NUMBER;
|
||
BEGIN
|
||
SELECT POIDS_V INTO poids FROM Volaille WHERE id_fermier=fermier and id_volaille=volaile;
|
||
SELECT AGE_V INTO age FROM Volaille WHERE id_fermier=fermier and id_volaille=volaile;
|
||
SELECT SALE_V INTO sale FROM Volaille WHERE id_fermier=fermier and id_volaille=volaile;
|
||
SELECT NB_MALADE_V INTO malade FROM Volaille WHERE id_fermier=fermier and id_volaille=volaile;
|
||
|
||
IF poids < 2.5 THEN
|
||
RAISE_APPLICATION_ERROR(-20334,'Trop maigre');
|
||
END IF;
|
||
IF age < 5 THEN
|
||
RAISE_APPLICATION_ERROR(-20335,'Trop Jeune');
|
||
END IF;
|
||
IF sale = 'T' THEN
|
||
RAISE_APPLICATION_ERROR(-20225,'Animal Sale');
|
||
END IF;
|
||
IF malade > 0 THEN
|
||
RAISE_APPLICATION_ERROR(-20226,'Animal Malade');
|
||
END IF;
|
||
|
||
SELECT dbms_random.value into rnd FROM dual;
|
||
-- Mise <20> jour des tables
|
||
IF rnd < 0.1 THEN
|
||
-- ne ponds pas
|
||
UPDATE Volaille SET PRODUCTION_V=PRODUCTION_V WHERE id_fermier=fermier and id_volaille=volaile;
|
||
ELSE
|
||
IF rnd < 0.5 THEN
|
||
-- pond 2 oeufs
|
||
UPDATE Volaille SET PRODUCTION_V=PRODUCTION_V+2 WHERE id_fermier=fermier and id_volaille=volaile;
|
||
ELSE
|
||
-- pond 1 oeuf
|
||
UPDATE Volaille SET PRODUCTION_V=PRODUCTION_V+1 WHERE id_fermier=fermier and id_volaille=volaile;
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
-- Groupe 6 CHECKED
|
||
CREATE OR REPLACE PROCEDURE NettoyerVache -- Checked
|
||
(
|
||
IdFermier ferme.id_fermier%type
|
||
) AS
|
||
Money ferme.ecus%type;
|
||
BEGIN
|
||
SELECT ecus into Money FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
Money := Money - 3;
|
||
if (Money < 0) then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
UPDATE ferme set sale_vache = 'F' WHERE IdFermier = id_fermier;
|
||
UPDATE ferme set ecus = Money WHERE ferme.id_fermier = IdFermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE SoignerVache -- Checked
|
||
(
|
||
IdFermier ferme.id_fermier%type
|
||
) AS
|
||
Money ferme.ecus%type;
|
||
BEGIN
|
||
SELECT ecus into Money FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
Money := Money - 6;
|
||
if (Money < 0) then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
UPDATE ferme set nb_malade_vache = '0' WHERE IdFermier = id_fermier;
|
||
UPDATE ferme set ecus = Money WHERE ferme.id_fermier = IdFermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE nourrir_vache -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type
|
||
) AS
|
||
Cout ferme.ecus%type;
|
||
nourriv ferme.nourri_vache%type;
|
||
BEGIN
|
||
SELECT ecus into Cout FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
Cout := Cout - 5;
|
||
if Cout < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
SELECT nourri_vache into nourriv FROM ferme WHERE idfermier = id_fermier;
|
||
if nourriv = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20222,'Animaux deja nourris');
|
||
else
|
||
UPDATE ferme set nourri_vache = 'T' WHERE idfermier = id_fermier;
|
||
UPDATE ferme set ecus = Cout WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE abreuver_vache -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type
|
||
) AS
|
||
Cout ferme.ecus%type;
|
||
abreuvagev ferme.abreuvage_vache%type;
|
||
BEGIN
|
||
SELECT ecus into Cout FROM ferme WHERE ferme.id_fermier = idfermier;
|
||
Cout := Cout - 2;
|
||
if Cout < 0 then
|
||
RAISE_APPLICATION_ERROR(-20111,'Pas assez d`argent');
|
||
else
|
||
SELECT abreuvage_vache into abreuvagev FROM ferme WHERE idfermier = id_fermier;
|
||
if abreuvagev = 'T' then
|
||
RAISE_APPLICATION_ERROR(-20223,'Animaux deja abreuves');
|
||
else
|
||
UPDATE ferme set abreuvage_vache = 'T' WHERE idfermier = id_fermier;
|
||
UPDATE ferme set ecus = Cout WHERE ferme.id_fermier = idfermier;
|
||
end if;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE creation_lait -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type
|
||
) AS
|
||
lait ferme.NB_LAIT%type;
|
||
sale_vache ferme.SALE_VACHE%type;
|
||
malade_vache ferme.NB_MALADE_VACHE%type;
|
||
poids ferme.POIDS_VACHE%type;
|
||
age ferme.AGE_VACHE%type;
|
||
BEGIN
|
||
SELECT SALE_VACHE into sale_vache FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
SELECT NB_MALADE_VACHE into malade_vache FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
SELECT NB_LAIT into lait FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
SELECT POIDS_VACHE into poids FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
SELECT AGE_VACHE into age FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
|
||
-- Vache tjs nourrie
|
||
if (malade_vache = 0 and sale_vache = 'F') then
|
||
if ((poids >= 80) and (age >= 10)) then
|
||
if (lait = 0) then
|
||
lait := lait + 8 ;
|
||
else
|
||
lait := lait + 4 ;
|
||
end if;
|
||
if (lait > 16) then
|
||
lait := 16;
|
||
end if;
|
||
UPDATE ferme set NB_LAIT = lait WHERE ferme.id_fermier = IdFermier;
|
||
end if;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE traire_lait -- Checked
|
||
(
|
||
idfermier ferme.id_fermier%type
|
||
) AS
|
||
nb_ecus ferme.ecus%type;
|
||
nblait ferme.NB_LAIT%type;
|
||
BEGIN
|
||
SELECT ecus into nb_ecus FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
SELECT NB_LAIT into nblait FROM ferme WHERE ferme.id_fermier = IdFermier;
|
||
|
||
-- Traire et vendre le lait
|
||
if (nblait <= 0) then
|
||
RAISE_APPLICATION_ERROR(-20444,'Pas de Lait');
|
||
else
|
||
nb_ecus := nb_ecus + (2 * nblait);
|
||
UPDATE ferme set ecus = nb_ecus WHERE ferme.id_fermier = IdFermier;
|
||
UPDATE ferme set NB_LAIT = 0 WHERE ferme.id_fermier = IdFermier;
|
||
end if;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION aff_paturage -- Checked
|
||
(
|
||
IdFermier ferme.id_fermier%type
|
||
)
|
||
RETURN sys_refcursor
|
||
AS
|
||
curseur sys_refcursor;
|
||
BEGIN
|
||
OPEN curseur FOR
|
||
SELECT ABREUVAGE_VACHE, NB_ABREUVAGE_VACHE, NOURRI_VACHE, NB_JEUNE_VACHE,SALE_VACHE, NB_MALADE_VACHE, POIDS_VACHE, AGE_VACHE, NB_LAIT
|
||
FROM ferme WHERE id_fermier = IdFermier;
|
||
RETURN curseur;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|