Zliczanie godzin

0

Witam,

Mam do napisania funkcję w PL/SQL, która na wejściu przyjmuje parametr INTEGER: id pracownika, i zwraca (FLOAT) liczbę godzin przepracowanych przez niego.

Struktura mojej bazy to w przybliżeniu:

WORKER:
id INTEGER PK

DAYS:
id INTEGER PK
date DATE
worker_id FK (do tabeli WORKER)

HOUR:
id INTEGER PK
start TIME (godzina rozpoczęcia)
stop TIME (godzina zakończenia, może być null)
days_id FK (do tabeli DAYS)

Muszę dla danego pracownika pobrać wszystkie godziny z danego miesiąca, a następnie obliczyć ich sumę.

Dzięki smile.gif

0

jak stop jest null to co wtedy???

0
Misiekd napisał(a)

jak stop jest null to co wtedy???

Domyślam się, że stop=NULL jest tylko w dniu bieżącym, w którym pracownik jest w pracy, a po wyjściu z pracy wpisuje się godzinę wyjścia. A jak się liczy miesięczną sumę, to oczywiście we wszystkich dniach będzie konkretna godzina.

Jeżeli to nieprawda, to napisz, w jakich warunkach rzeczywiście atrybut "stop" może przyjmować wartość NULL i czy taka pozycja może się zdarzyć w rozliczanym miesiącu? Jeżeli tak, to jak to ma być liczone?

0

Pewnie wprowadziłem niepotrzebne zamieszanie, null może być tylko w dniu bieżącym. Wobec tego nie będzie to miało żadnego znaczenia, bo funkcja może być wywołana po zakończeniu miesiąca.

0

pomijając sam fakt rozdziału tego na dwie tabele (hours i days) to mniej więcej tak (BTW po co procedura?)

SELECT 
  Sum(extract (hour FROM CASE WHEN h.stop < h.start THEN h.stop + 1 ELSE h.stop  END - h.start))
FROM
  HOUR h,
  days d
WHERE
  h.days_id = d.id
  and d.date between data_1 and data_2
  and d.worker_id = id_pracownika;

BTW przyjąłem, że ten typ TIME przechowuje TYLKO czas bez daty bo takiego w oracle nie ma.

0

dzięki za pomoc :)

a procedura, bo mam taki wymóg do projektu :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1