Hmmm, ne shvatam potrebu za funkcijom, jer u obicnom SELECT izrazu mozes da pokupis potrebne datume... Taj izraz ti je vec misk0 napisao...
Medjutim, ako IPAK zelis funkciju iz nekih potreba, evo kako bi to moglo izgleda u Oracleu (NAPOMENA: pisem iz glave, nije testirano!):
Prvo kreiras neki tip podataka, koji ce sadrzati listu sa datumima:
Code:
CREATE OR REPLACE TYPE tabela_sa_datumima
AS TABLE OF DATE INDEX BY BINARY_INTEGER;
Zatim kreiras potrebnu funkciju:
Code:
CREATE OR REPLACE FUNCTION get_dates(
p_start_date IN DATE,
p_end_date IN DATE)
RETURN tabela_sa_datumima
IS
datumi tabela_sa_datumima;
CURSOR lista_datuma(cur_start_date IN DATE, cur_end_date IN DATE) IS
SELECT kolona_sa_datumom
FROM neka_tabela
WHERE kolona_sa_datumom >= cur_start_date
AND kolona_sa_datumom <= cur_end_date
ORDER BY kolona_sa_datumom;
BEGIN
FOR rec_datumi IN lista_datuma(p_start_date, p_end_date)
LOOP
datumi(datumi.COUNT + 1) := rec_datumi.kolona_sa_datumom;
END LOOP;
RETURN datumi;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001, 'Nije pronadjen nijedan zapis u tom periodu');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20002, 'Prekrsaj u sesnaestercu. Dosudjen penal. ;) ');
END get_dates;
I na kraju trebas samo pokupiti datume iz te liste...
Code:
DECLARE
datumi tabela_sa_datumima;
BEGIN
datumi := get_dates(SYSDATE - 7, SYSDATE + 7);
FOR i IN datumi.FIRST..datumi.LAST
LOOP
-- uradi nesto sa datumima ...
dbms_output.put_line(TO_CHAR(datumi(i), 'dd.mm.yyyy hh24:ii:ss'));
END LOOP;
END;
Ubuduce te molim da navedes o kojoj je bazi rijec, kako ne bi doslo do nesporazuma...
[Ovu poruku je menjao StRiPy dana 17.11.2005. u 12:56 GMT+1]