Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE PACKAGE BODY pack AS
- FUNCTION Rekursija_from_to (VarDs VARCHAR2, VarDb VARCHAR2)
- RETURN NUMBER IS record Celi%ROWTYPE;
- CURSOR c1 IS
- SELECT * FROM Celi
- WHERE Ds=VarDs; -- kursoru no sakuma virsotni
- findGoal NUMBER;
- findGoal_Flag NUMBER; -- indikators, ka celš jau bija atrasts ar
- -- iepreikšēju izsaukumu, jo findGoal
- -- var mainities darba gaita.
- BEGIN
- findGoal:=0;
- findGoal_Flag:=0;
- OPEN c1;
- LOOP
- FETCH c1 INTO record;
- EXIT WHEN c1%NOTFOUND;
- IF record.Db<>VarDb then -- ja parmeklejama virsotne nav mērķis
- findGoal:=Rekursija_from_to(record.Db, VarDb);
- -- tad rekursivs izsaukums, kas meklē mērki
- -- beigu virsotni
- IF findGoal = 1 then -- ja atrodam mērķi
- findGoal_Flag := 1; -- tad piešķiram findGoal_Flag vertibu 1,
- -- lai atrastie celi tiktu atgriezti atpakal
- INSERT INTO ResultatsCeli(NO, LIDZ, CELJHS)
- VALUES(record.Ds, record.Db, global_var);
- -- ievieto tabulā ResultatsCelji atrartās
- -- vērtibas, nogriezni, kas savieno ar
- -- sākuma mērķi
- END IF;
- ELSE
- global_var := global_var + 1; -- global_var tiek izmantots, lai piešķirtu
- -- numuru katram atrastajam celam
- findGoal_Flag :=1; -- atrastais celš lidz nogrieznim,
- -- kas savieno ar mērki
- INSERT INTO ResultatsCeli(NO, LIDZ, CELJHS)
- VALUES(record.Ds, record.Db, global_var);
- -- atrastais celš lidz nogrieznim, kas
- -- savieno ar mērki tiek ievietots tabulā
- -- ResultatsCelji
- END IF;
- END LOOP;
- CLOSE c1;
- RETURN findGoal_Flag; -- atgriež atpakal atrasto celus
- END Rekursija_from_to;
- FUNCTION Rekursija_goes_in (VarDs VARCHAR2)
- RETURN NUMBER IS record Celi%ROWTYPE;
- findGoal NUMBER;
- CURSOR c1 IS
- SELECT * FROM Celi
- WHERE Db=VarDs; -- iezimejam ar kursoru virsotni,
- -- kuras priekšteči tiks meklēti
- BEGIN
- OPEN c1;
- LOOP
- FETCH c1 INTO record;
- EXIT WHEN c1%NOTFOUND;
- findGoal := Rekursija_goes_in (record.Ds);
- -- Rekursivais izsaukums record.Ds,
- -- lai atrast visus priekštečus ievaditajai
- -- virsotnei, ko satur mainigais VarDs.
- INSERT INTO ResultatsCelji(NO) -- Ievietojam tabulā ResultatsCelji
- VALUES (record.Ds); -- atrastos priekštečus ievaditajai virsotnei
- END LOOP;
- CLOSE c1;
- RETURN findGoal;
- END Rekursija_goes_in;
- FUNCTION Rekursija_goes_out (VarDs VARCHAR2)
- RETURN NUMBER IS record Celi%ROWTYPE;
- findGoal NUMBER; -- jo findGoal var brivi mainities
- CURSOR c1 IS
- SELECT * FROM Celi -- iezimejam ar kursoru visas
- WHERE Ds=VarDs; -- tabulas sākuma virsotnes
- BEGIN
- OPEN c1;
- LOOP
- FETCH c1 INTO record;
- EXIT WHEN c1%NOTFOUND;
- findGoal := Rekursija_goes_out(record.Db);
- -- Rekursivs izsaukums, izsaucam visus
- -- ievaditas virsotnes pēctečus
- Insert into ResultatsCelji(NO) Values(record.Db);
- -- ievieto tabulā iegūtos rezultātus, visus
- -- atrastos virsotnes pēctečus
- END LOOP;
- CLOSE c1;
- RETURN findGoal;
- END Rekursija_goes_out;
- PROCEDURE from_to(VarDs VARCHAR2,VarDb VARCHAR2) AS
- NUM NUMBER;
- BEGIN
- global_var := 0; -- piešķiram globālajam mainigajam
- -- nulli, lai nomestu skaititajus
- DELETE FROM ResultatsCelji; -- izdzēšam glabājamos rezultātus
- -- no jaunās faktu tabulas
- NUM:=Rekursija_from_to(VarDs,VarDb);
- END from_to;
- PROCEDURE goes_in(VarDs VARCHAR2) AS
- NUM NUMBER;
- BEGIN
- global_var := 0;
- DELETE FROM ResultatsCelji; -- izdzēšam glabājamos rezultātus
- -- no jaunās faktu tabulas
- NUM:=Rekursija_goes_in(VarDs);
- END goes_in;
- PROCEDURE goes_out(VarDs VARCHAR2) AS
- NUM NUMBER;
- BEGIN
- global_var := 0;
- DELETE FROM ResultatsCelji; -- izdzēšam glabājamos rezultātus
- -- no jaunās faktu tabulas
- NUM:=Rekursija_goes_out(VarDs);
- END goes_out;
- END pack;
Add Comment
Please, Sign In to add comment