Der Einfachheit halber sei hier erwähnt,
dass für die Bearbeitung ein Package erstellt wird.
Auf die in der Praxis übliche Fehlerbehandlung
wird aus Gründen der Übersichtlichkeit verzichtet…

create or replace PACKAGE body ABLAUF AS
procedure ablauf as
mann love.person;
frau love.person;
begin
mann.pnr:=815;
frau.pnr:=816;
itlove (frau, mann);
end;

procedure itlove (frau in out love.person, mann in out love.person) as
tagesform_sie tagesform%rowtype;
tagesform_er tagesform%rowtype;
situation umstaende%rowtype;
interessant number;
zufallszahl number;
tage number;
heute date;
common_satisfaction number:=0;
begin
— initialisieren
loop
select current_date into heute from dual;
interessant:=gehnaufdencafe(tagesform_sie, tagesform_er);
umweltsituation(frau, mann, tagesform_sie, tagesform_er, situation, heute);
select dbms_random.value(1,1000) into zufallszahl from dual;
if ((zufallszahl mod 10)=0 or interessant>100) then
exit;
end if;
end loop;
if (interessant>100) then
select dbms_random.value(1,31) into tage from dual;
heute:=heute;
candlelightdinner(frau, mann, tagesform_sie, tagesform_er, situation, heute);
end if;
end;
procedure umweltsituation(frau in out love.person, mann in out love.person, tagesform_sie in out tagesform%rowtype, tagesform_er in out tagesform%rowtype, situation in out umstaende%rowtype, heute date) is
begin
select * into tagesform_sie from tagesform where pnr=frau.pnr and as_of_date=heute;
select * into tagesform_er from tagesform where pnr=mann.pnr and as_of_date=heute;
select * into situation from umstaende where as_of_date=heute;
end;

function isitlove(frau love.person, mann love.person) return number is
satisfaction_level number;
i number:=1;
zufallszahl number;
begin
for i in 1..10 loop
— Was in diesem Loop so genau passiert, möchten wir gar nicht weiter beleuchten.
— Der geneigte Leser möge es sich vorstellen…
select dbms_random.value(1,1000) into zufallszahl from dual;
satisfaction_level:=satisfaction_level+zufallszahl;
end loop;
return satisfaction_level;
end;

function gehnaufdencafe(tagesform_sie tagesform%rowtype, tagesform_er tagesform%rowtype) return number is
geruch number;
scoring number;
begin
if (tagesform_sie.geruch=-99 and tagesform_er.geruch=-99) then — beide müffeln, vergiss es.
scoring:=0;
else
scoring:=scoring+(tagesform_sie.laune+tagesform_er.laune)*3;
scoring:=scoring+(tagesform_sie.freude+tagesform_er.freude)*4;
scoring:=scoring-(tagesform_sie.aerger+tagesform_er.aerger)*4;
scoring:=scoring+(tagesform_sie.trauer+tagesform_er.trauer)*5;
scoring:=scoring+((tagesform_sie.schmusebeduerfnis*2)+(tagesform_er.schmusebeduerfnis))*99;
end if;
return greatest(scoring,0);
end;

procedure candlelightdinner(frau in out love.person, mann in out love.person, tagesform_sie in out tagesform%rowtype, tagesform_er in out tagesform%rowtype, situation in out umstaende%rowtype, heute date) is
prickelfaktor number;
tiefeblickaugen number;
boom number;
lpromille number;
satisfaction_level number;
zaehl number;
begin
prickelfaktor:=tagesform_sie.laune+tagesform_er.laune;
if abs(frau.lieblingsspeise-mann.lieblingsspeise)<10 then prickelfaktor:=prickelfaktor+10; end if; -- Nun lassen wir sie ein paar Glaeschen Wein trinken lpromille:=0; boom:=400; mann.promille:=0; frau.promille:=0; for zaehl in 1..10 loop lpromille:=lpromille+0.2; mann.promille:=mann.promille+lpromille; frau.promille:=frau.promille+lpromille; select dbms_random.value(400+lpromille*100,2000) into boom from dual; end loop; if (lpromille<1.2 and boom>1500) then
satisfaction_level:=isitlove(frau,mann);
if satisfaction_level>=700 then
mann.beziehungsstatus:=constLOVE;
frau.beziehungsstatus:=constLOVE;
else
mann.beziehungsstatus:=constSYMPA;
frau.beziehungsstatus:=constSYMPA;
end if;
end if;
end;

END ABLAUF;

2+

Users who have LIKED this post:

  • avatar