Guest User

Untitled

a guest
Apr 26th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. CREATE OR REPLACE PACKAGE BODY pack AS
  2.  
  3. FUNCTION Rekursija_from_to (VarDs VARCHAR2, VarDb VARCHAR2)
  4. RETURN NUMBER IS record Celi%ROWTYPE;
  5.  
  6. CURSOR c1 IS
  7. SELECT * FROM Celi
  8. WHERE Ds=VarDs; -- kursoru no sakuma virsotni
  9. findGoal NUMBER;
  10. findGoal_Flag NUMBER; -- indikators, ka celš jau bija atrasts ar
  11. -- iepreikšēju izsaukumu, jo findGoal
  12. -- var mainities darba gaita.
  13. BEGIN
  14. findGoal:=0;
  15. findGoal_Flag:=0;
  16. OPEN c1;
  17. LOOP
  18. FETCH c1 INTO record;
  19. EXIT WHEN c1%NOTFOUND;
  20. IF record.Db<>VarDb then -- ja parmeklejama virsotne nav mērķis
  21. findGoal:=Rekursija_from_to(record.Db, VarDb);
  22. -- tad rekursivs izsaukums, kas meklē mērki
  23. -- beigu virsotni
  24. IF findGoal = 1 then -- ja atrodam mērķi
  25. findGoal_Flag := 1; -- tad piešķiram findGoal_Flag vertibu 1,
  26. -- lai atrastie celi tiktu atgriezti atpakal
  27. INSERT INTO ResultatsCeli(NO, LIDZ, CELJHS)
  28. VALUES(record.Ds, record.Db, global_var);
  29. -- ievieto tabulā ResultatsCelji atrartās
  30. -- vērtibas, nogriezni, kas savieno ar
  31. -- sākuma mērķi
  32. END IF;
  33. ELSE
  34. global_var := global_var + 1; -- global_var tiek izmantots, lai piešķirtu
  35. -- numuru katram atrastajam celam
  36. findGoal_Flag :=1; -- atrastais celš lidz nogrieznim,
  37. -- kas savieno ar mērki
  38. INSERT INTO ResultatsCeli(NO, LIDZ, CELJHS)
  39. VALUES(record.Ds, record.Db, global_var);
  40. -- atrastais celš lidz nogrieznim, kas
  41. -- savieno ar mērki tiek ievietots tabulā
  42. -- ResultatsCelji
  43.  
  44. END IF;
  45. END LOOP;
  46. CLOSE c1;
  47. RETURN findGoal_Flag; -- atgriež atpakal atrasto celus
  48. END Rekursija_from_to;
  49.  
  50. FUNCTION Rekursija_goes_in (VarDs VARCHAR2)
  51. RETURN NUMBER IS record Celi%ROWTYPE;
  52.  
  53. findGoal NUMBER;
  54. CURSOR c1 IS
  55. SELECT * FROM Celi
  56. WHERE Db=VarDs; -- iezimejam ar kursoru virsotni,
  57. -- kuras priekšteči tiks meklēti
  58. BEGIN
  59. OPEN c1;
  60. LOOP
  61. FETCH c1 INTO record;
  62. EXIT WHEN c1%NOTFOUND;
  63. findGoal := Rekursija_goes_in (record.Ds);
  64. -- Rekursivais izsaukums record.Ds,
  65. -- lai atrast visus priekštečus ievaditajai
  66. -- virsotnei, ko satur mainigais VarDs.
  67. INSERT INTO ResultatsCelji(NO) -- Ievietojam tabulā ResultatsCelji
  68. VALUES (record.Ds); -- atrastos priekštečus ievaditajai virsotnei
  69. END LOOP;
  70. CLOSE c1;
  71. RETURN findGoal;
  72. END Rekursija_goes_in;
  73.  
  74. FUNCTION Rekursija_goes_out (VarDs VARCHAR2)
  75. RETURN NUMBER IS record Celi%ROWTYPE;
  76.  
  77. findGoal NUMBER; -- jo findGoal var brivi mainities
  78. CURSOR c1 IS
  79. SELECT * FROM Celi -- iezimejam ar kursoru visas
  80. WHERE Ds=VarDs; -- tabulas sākuma virsotnes
  81.  
  82. BEGIN
  83. OPEN c1;
  84. LOOP
  85. FETCH c1 INTO record;
  86. EXIT WHEN c1%NOTFOUND;
  87. findGoal := Rekursija_goes_out(record.Db);
  88. -- Rekursivs izsaukums, izsaucam visus
  89. -- ievaditas virsotnes pēctečus
  90. Insert into ResultatsCelji(NO) Values(record.Db);
  91. -- ievieto tabulā iegūtos rezultātus, visus
  92. -- atrastos virsotnes pēctečus
  93. END LOOP;
  94. CLOSE c1;
  95. RETURN findGoal;
  96. END Rekursija_goes_out;
  97.  
  98. PROCEDURE from_to(VarDs VARCHAR2,VarDb VARCHAR2) AS
  99. NUM NUMBER;
  100. BEGIN
  101. global_var := 0; -- piešķiram globālajam mainigajam
  102. -- nulli, lai nomestu skaititajus
  103. DELETE FROM ResultatsCelji; -- izdzēšam glabājamos rezultātus
  104. -- no jaunās faktu tabulas
  105. NUM:=Rekursija_from_to(VarDs,VarDb);
  106. END from_to;
  107.  
  108. PROCEDURE goes_in(VarDs VARCHAR2) AS
  109. NUM NUMBER;
  110. BEGIN
  111. global_var := 0;
  112. DELETE FROM ResultatsCelji; -- izdzēšam glabājamos rezultātus
  113. -- no jaunās faktu tabulas
  114. NUM:=Rekursija_goes_in(VarDs);
  115. END goes_in;
  116.  
  117. PROCEDURE goes_out(VarDs VARCHAR2) AS
  118. NUM NUMBER;
  119.  
  120. BEGIN
  121. global_var := 0;
  122. DELETE FROM ResultatsCelji; -- izdzēšam glabājamos rezultātus
  123. -- no jaunās faktu tabulas
  124. NUM:=Rekursija_goes_out(VarDs);
  125. END goes_out;
  126.  
  127. END pack;
Add Comment
Please, Sign In to add comment