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: 5162 | Odgovora: 15 ] > FB > Twit

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 - pre 223 meseci
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
 
Odgovor na temu

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

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

ICQ: 46802502


+49 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...12.11.2005. u 12:33 - pre 223 meseci
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 ::
 
Odgovor na temu

Raspucin

Član broj: 20699
Poruke: 216
62.108.101.*

ICQ: 244452581


+3 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...13.11.2005. u 22:28 - pre 223 meseci
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)...
 
Odgovor na temu

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 - pre 223 meseci
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
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

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

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 - pre 223 meseci
Treba mi funkcija.

Zar je lakse u ovom slucaju napisati proceduru od funkcije?
nn
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 09:36 - pre 223 meseci
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]
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 13:39 - pre 223 meseci
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
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 14:01 - pre 223 meseci
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]
 
Odgovor na temu

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 - pre 223 meseci
Hvala u svakom slucaju,ali meni bi trebala funkcija u plsql_u Oracle baza.
nn
 
Odgovor na temu

Zidar
Canada

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



+79 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 17:33 - pre 223 meseci
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.

:-)
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...16.11.2005. u 17:51 - pre 223 meseci
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.
 
Odgovor na temu

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 - pre 223 meseci
Pa eto,tvoje mucenje se ipak isplatilo,napisao si jednu funkciju koja ce nekom posluziti :)


nn
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

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

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Kako napisati funkciju u sql_u koja ce vracati vise datuma...17.11.2005. u 11:54 - pre 223 meseci
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
 
Odgovor na temu

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 - pre 223 meseci
Hvala Stripy za primjer funkcije.

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

pozdrav
nn
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.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 - pre 222 meseci
Citat:
jablan:
Code:

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



Ili set @d1 = @d1 + 1

Pozdrav
 
Odgovor na temu

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

[ Pregleda: 5162 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

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