1

Temat: Problem z funkcją i kursorami

Witam. Posiadam tabelę z następującymi kolumnami:
- nazwisko
- data_zatrudnienia.
Muszę napisać funkcję która zwraca rekordy typu nazwiska (wcześniej go zdefiniowałem
- type nazwiska {nazwisko1 varchar, nazwisko2 varchar}) 
zawierające nazwiska dla których różnica w datach zatrudnienia jest najmniejsza. W funkcji muszę użyć kursorów.
Pomoże ktoś bo nie mam zielonego pojęcia jak to zrobić...

2

Odp: Problem z funkcją i kursorami

Nie wiem czy dobrze cię zrozumiałem ale zerknij na poniższy przykład:
create table pracownicy (id serial primary key, nazwisko varchar (50) not null,data_zatrudnienia date not null);
create type nazwisko as (nazwisko1 varchar(50), nazwisko2 varchar(50));
insert into pracownicy (nazwisko,data_zatrudnienia) values
('a','2013-01-01'),
('b','2013-02-01'),
('c','2013-03-01'),
('d','2013-04-01'),
('e','2013-05-01');

CREATE FUNCTION wyswietl() RETURNS SETOF nazwisko AS
$BODY$declare r nazwisko;
begin
   for r in select nazwisko as nazwisko1 , lead (nazwisko) over (order by data_zatrudnienia) as nazwisko2 from pracownicy loop
      return next r;
   end loop;
   return;
end;$BODY$
LANGUAGE plpgsql STABLE;

select * from wyswietl();

3

Odp: Problem z funkcją i kursorami

Dziękuję za odpowiedź. Mniej więcej o to chodziło. W pierwszej kolumnie  (nazwisko1) muszą byc nazwiska posortowane od pracującego najdłużej do pracującego najkrócej natomiast w drugiej (nazwisko2) występuje nazwisko, którego data zatrudnienia jest najbliższa dacie zatrudnienia nazwiska1. Nie wiem czy zrozumiale to opisałem hmm
Czyli w kolumnie nazwisko2 dane nazwisko może się powtarzać. W kolumnie nazwisko1 nie. Z góry dziekuję za pomoc bo nie dam rady tego opanować.

Ostatnio edytowany przez mrktos (2014-08-20 13:55:05)