Rekurzív lekérdezésekkel megoldható feladatok ============================================= /* START WITH CONNECT BY Írjunk meg egy procedúrát, amelyik a NIKOVITS.VAGYONOK tábla alapján kiírja azoknak a személyeknek a nevét, akikre igaz, hogy van olyan leszármazottjuk, akinek nagyobb a vagyona, mint az illető vagyona. */ CREATE OR REPLACE PROCEDURE gazdag_leszarmazott IS ... set serveroutput on execute gazdag_leszarmazott(); ----------------------------------------------------- CREATE OR REPLACE PROCEDURE gazdag_leszarmazott IS cnt INTEGER; BEGIN FOR rec IN (SELECT nev, vagyon FROM nikovits.vagyonok) loop -- menjünk végig a neveken, beolvasva a vagyonukat is ... Indítsunk egy rekurzív lekérdezést, amely az aktuális rekordban szereplő személy leszármazottait nézi meg, és megszámolja, hogy hány olyan van, akinek nagyobb a vagyona, mint az aktuális személynek. Ha van legalább egy ilyen, akkor az aktuális személyt ki kell írni. ... END loop; END; / ===================================================== /* Írjunk meg egy procedúrát, amelyik a NIKOVITS.VAGYONOK tábla alapján kiírja azoknak a személyeknek a nevét, vagyonát, valamint leszármazottainak átlagos vagyonát, akikre igaz, hogy a leszármazottainak átlagos vagyona nagyobb, mint az illető vagyona. A program tehát soronként 3 adatot ír ki: név, vagyon, leszármazottak átlagos vagyona */ CREATE OR REPLACE PROCEDURE gazdag_leszarmazottak IS ... set serveroutput on execute gazdag_leszarmazottak(); ----------------------------------------------------- -- Help: hasonló az előzőhöz, de most a leszármazottak átlagos vagyonát kell kiszámolnunk. -- Vigyázzunk! Önmagának senki nem leszármazottja. ===================================================== /* Írjunk meg egy procedúrát, amelyik a NIKOVITS.JARATOK tábla alapján kiírja azoknak az irányított köröknek a csomópontjait (városait), amelyek a paraméterként megadott várossal kezdődnek és végződnek. Tetszőleges elválasztó karakter használható. Példa egy kiírásra: Dallas-Chicago-Denver-Dallas */ CREATE OR REPLACE PROCEDURE kor_kereso(kezdopont VARCHAR2) IS ... set serveroutput on execute kor_kereso('Denver'); ----------------------------------------------------- -- Help: A SYS_CONNECT_BY_PATH függvény segítségével listázzuk ki az egymás után következő városokat, -- és a CONNECT_BY_ROOT segítségével vizsgáljuk meg, hogy az aktuális város azonos-e azzal, ahonnan indultunk. ===================================================== /* Írjunk meg egy procedúrát, amelyik a NIKOVITS.VAGYONOK tábla alapján kiírja azoknak a nevét és városát, akiknek legalább 2 olyan felmenőjük van, akiknek ugyanaz a városa, mint az illetőnek. */ CREATE OR REPLACE PROCEDURE felmeno2 IS ... set serveroutput on execute felmeno2(); ----------------------------------------------------- -- Help: A SYS_CONNECT_BY_PATH függvény segítségével listázzuk ki a leszármazottak városait, és -- vizsgáljuk meg, hogy ez a lista hányszor tartalmazza az aktuális személy városát.