Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako napisati funkciju u sql_u koja ce vracati vise datuma...

[es] :: Baze podataka :: Kako napisati funkciju u sql_u koja ce vracati vise datuma...

[ Pregleda: 1720 | Odgovora: 15 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ninobos
BS

Član broj: 44692
Poruke: 49
*.customer.m-online.net.



Profil

icon Kako napisati funkciju u sql_u koja ce vracati vise datuma...11.11.2005. u 10:49

Pozdrav,

kako napraviti funkciju koja ce mi vracati vise datuma.Parametri funkcije bi trebali biti npr. (datum_od in date,datum_do in date).

Ako su vrednosti parametara npr.10.01.2005 i 15.01.2005 trebao bi dobiti kao rezultat sve poredane datume od 10 do 15.



[Ovu poruku je menjao Ninobos dana 11.11.2005. u 14:00 GMT+1]
nn
11.11.2005. u 10:49 

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2438
*.adsl.ticino.com.

ICQ: 46802502


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...12.11.2005. u 12:33
Funkciju ili upit?

Mislis da ti vrati sve recorde u datom opsegu?
Code:

SELECT * FROM tvoja_tabela WHERE datum_do > datum AND datum_od < datum


:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
12.11.2005. u 12:33 

Raspucin
Ljubisa Punosevac
Java Programer
Salzburg, Austrija

Član broj: 20699
Poruke: 181
62.108.101.*

ICQ: 244452581


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...13.11.2005. u 22:28
U standardnom SQL-u ne postoje funkcije koje mozes da kreiras kao npr. u PL/SQL-u (kao sto si verovatno navikao). Inace to uopste nije neki problem za PL/SQL ali za SQL to ne mozes da uradis bez nekog JOIN-a (ako su podaci u tabelama)...
13.11.2005. u 22:28 

Ninobos
BS

Član broj: 44692
Poruke: 49
*.customer.m-online.net.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...14.11.2005. u 15:56
Traba napraviti funkciju bez zavisnosti od tabela i podacima u tabelama.

Npr:

create or replace function datum (datum_od in date,datum_do in date) return date

.................

ako su parametri 29.12.2004 i 02.01.2005 treba da dobijem

29.12.2004
30.12.2004
31.12.2004
01.01.2005
02.01.2005


nn
14.11.2005. u 15:56 

Zidar
Canada

Član broj: 15387
Poruke: 2036
*.eqao.com.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...15.11.2005. u 15:31
Treba li ti bas funkcija ili moze i stored procedure?
15.11.2005. u 15:31 

Ninobos
BS

Član broj: 44692
Poruke: 49
*.customer.m-online.net.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 08:21
Treba mi funkcija.

Zar je lakse u ovom slucaju napisati proceduru od funkcije?
nn
16.11.2005. u 08:21 

jablan
Mladen Jablanović
Beograd

Član broj: 8286
Poruke: 3322
*.yubc.net.

Sajt: blog.radioni.ca


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 09:36
Code:
alter FUNCTION dbo.aaa ( @d1 datetime, @d2 datetime )
RETURNS @dates TABLE
(
d datetime
)
AS
BEGIN
    while @d1 < @d2
    begin
        set @d1 = dateadd(day, 1 , @d1)
        INSERT @dates select @d1
    end
    RETURN
END

Pa onda
Code:
select d from dbo.aaa('2005-01-05', '2005-01-15')


P.S. Ovo je u MSSQL

[Ovu poruku je menjao jablan dana 16.11.2005. u 10:37 GMT+1]
16.11.2005. u 09:36 

Zidar
Canada

Član broj: 15387
Poruke: 2036
*.eqao.com.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 13:39
Podjednako je tesko ili lako napisati funkciju ili proceduru. Zavisno od toga sta hoces da uradis sa rezultujucom tabelom upotrebices jedno ili drugo.

Procedura moze da ti ispise rezultujuci skup podataka, mozes da ga iz procedure upises u neku tabelu, ali ne mozes da koristis rezultat procedure u nekom JOINu.

Kad ti funkcija vrati tabelu, tu tabelu mozes da koristis u JOINu (bar bi tako trebalo, ako gresim molim da me neko ispravi, da ne delim pogresne savete), plus sve ostalo sto moze procedura. Zasto odna pistai proceduru, kad funkcija izgleda nudi vise? Zato sto su funkcije uvedene u MS SQL tek u verziji 2000 i vecina starih boraca ce po inerciji da nadje neko resenje sa procedurama, cisto iz navike.

Hvala jablanu za funkciju, meni ce biti od koristi koliko danas
16.11.2005. u 13:39 

jablan
Mladen Jablanović
Beograd

Član broj: 8286
Poruke: 3322
*.yubc.net.

Sajt: blog.radioni.ca


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 14:01
Možda najbitnija razlika: funkcija treba da bude upravo to - funkcija koja na osnovu prosleđenih parametara vraća neki rezultat (skalar ili tabelu, svejedno).
Procedura ima značajno drugačiju svrhu - treba da izvrši neku akciju nad bazom.

Drugim rečima, funkcija ne bi smela da, kao side-effect, izaziva bilo kakvu promenu podataka u bazi. Štaviše, mislim da MSSQL i ne dozvoljava kreiranje takvih "podmuklih" funkcija.

P.S. Ako koristite gornju funkciju, ispravite je da bude kako treba (ispravne granice, zaokruživanje na 00:00 u okviru dana itd), ja sam samo nalupao kostur... Da ne bude posle...

[Ovu poruku je menjao jablan dana 16.11.2005. u 15:03 GMT+1]
16.11.2005. u 14:01 

Ninobos
BS

Član broj: 44692
Poruke: 49
*.customer.m-online.net.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 17:00
Hvala u svakom slucaju,ali meni bi trebala funkcija u plsql_u Oracle baza.
nn
16.11.2005. u 17:00 

Zidar
Canada

Član broj: 15387
Poruke: 2036
*.eqao.com.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 17:33
Hvala jablanu na savetu :-)
Ako nista bice mi dobro za vezbu da poradim na primeru koji si ostavio. Do sada sam pravio samo MS SQL funkcije koje vracaju skalar, kad je bas moralo.

:-)
16.11.2005. u 17:33 

jablan
Mladen Jablanović
Beograd

Član broj: 8286
Poruke: 3322
..taman-bg.customer.sbb.co.yu.

Sajt: blog.radioni.ca


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 17:51
Citat:
Ninobos: meni bi trebala funkcija u plsql_u Oracle baza.

Lepo što si rekao na početku, pa se nismo mučili da ti odgovorimo.
16.11.2005. u 17:51 

Ninobos
BS

Član broj: 44692
Poruke: 49
*.customer.m-online.net.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...17.11.2005. u 10:55
Pa eto,tvoje mucenje se ipak isplatilo,napisao si jednu funkciju koja ce nekom posluziti :)


nn
17.11.2005. u 10:55 

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL Developer, Erst..
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...17.11.2005. u 11:54
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]
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
17.11.2005. u 11:54 

Ninobos
BS

Član broj: 44692
Poruke: 49
*.customer.m-online.net.



Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...17.11.2005. u 16:59
Hvala Stripy za primjer funkcije.

U buduce cu voditi racuna o potpunim informacijama za pitanje..

pozdrav
nn
17.11.2005. u 16:59 

branimir.ts
Beograd

Član broj: 56661
Poruke: 94
*.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...01.12.2005. u 12:10
Citat:
jablan:
Code:

set @d1 = dateadd(day, 1 , @d1)



Ili set @d1 = @d1 + 1

Pozdrav
01.12.2005. u 12:10 

[es] :: Baze podataka :: Kako napisati funkciju u sql_u koja ce vracati vise datuma...

[ Pregleda: 1720 | Odgovora: 15 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.