Mam taki problem, muszę zrobić w oracl graf, a poźniej za pomocą kursorów zrobić wyszukiwanie drogi w tym grafie (od jednego węzła do drugiego). Do stworzenia grafu uzyłem tabeli słownikowej:
Cytat
create table miasta
(idmiasta int primary key,
nazwa varchar(20) not null UNIQUE);
(idmiasta int primary key,
nazwa varchar(20) not null UNIQUE);
a w opisie grafu posłużyłem się indeksami do słownika:
Cytat
create table graf2
(od int,
do int,
odleglosc real,
waga real,
constraint pk Primary key (od, do),
constraint fk1 Foreign key (od) References miasta(idmiasta),
constraint fk2 Foreign key (do) References miasta(idmiasta)
);
(od int,
do int,
odleglosc real,
waga real,
constraint pk Primary key (od, do),
constraint fk1 Foreign key (od) References miasta(idmiasta),
constraint fk2 Foreign key (do) References miasta(idmiasta)
);
i teraz zaczynaja sie schody bo muszę zrobić wyszukiwanie drogi w takim grafie (schemat tego grafu można znaleść pod linkiem: rysunek grafu). Liczby nad nazwą miasta to nr indeksu - idmiasta w tabeli miasta).
Póki co stworzyłem tylko jeden kursor, który zwraca nam wartosci, ale tylko pomiędzy dwoma najbliższymi węzłami:
Cytat
SET SERVEROUTPUT On;
declare rec graf2%rowtype;
cursor sledz
is select *
from graf2
where od = 2 and cel = 1;
begin
open sledz;
fetch sledz into rec;
while sledz%found
loop
dbms_output.put_line(sledz%rowcount);
dbms_output.put_line(rec.od|| ' ' ||rec.cel|| ' ' ||rec.odleglosc||' '||rec.koszt);
fetch sledz into rec;
end loop;
close sledz;
end;
declare rec graf2%rowtype;
cursor sledz
is select *
from graf2
where od = 2 and cel = 1;
begin
open sledz;
fetch sledz into rec;
while sledz%found
loop
dbms_output.put_line(sledz%rowcount);
dbms_output.put_line(rec.od|| ' ' ||rec.cel|| ' ' ||rec.odleglosc||' '||rec.koszt);
fetch sledz into rec;
end loop;
close sledz;
end;
Jeśli ktoś ma jakiś pomysł na rozwiązanie tego proglemu to byłbym wdzięczny.