Uvod

Tokom rada sa bazama podataka često se javlja potreba da se određeni SQL kod ponavlja. Na primer, može biti potrebno više puta izračunati broj filmova, pronaći naziv filma na osnovu identifikatora ili prikazati određenu grupu podataka.

Pisanje istog SQL koda više puta nije praktično jer produžava vreme rada, povećava mogućnost greške i otežava održavanje baze podataka.

Zbog toga SQL Server omogućava kreiranje korisnički definisanih funkcija (User Defined Functions – UDF).

Funkcije omogućavaju da se određeni SQL kod jednom napiše i kasnije koristi više puta.

Možemo ih zamisliti kao:

„male programe unutar baze podataka koji izvršavaju određeni zadatak i vraćaju rezultat“


1. Koncept korisnički definisanih funkcija

Korisnički definisana funkcija predstavlja SQL objekat koji:

  • prima parametre (po potrebi),

  • izvršava određenu logiku,

  • vraća rezultat.

Za razliku od običnih SELECT upita, funkcija se može više puta koristiti bez ponovnog pisanja istog koda.

Na primer, umesto da stalno pišemo:

SELECT COUNT(*)
FROM Film;

možemo napraviti funkciju koja taj posao obavlja za nas.


Prednosti korišćenja funkcija

Korišćenje funkcija donosi više prednosti:

1. Ponovna upotreba koda: Kod se piše jednom, a koristi više puta.

2. Jednostavniji upiti: Složeni SQL kod postaje pregledniji.

3. Lakše održavanje: Ako treba promeniti logiku, menja se samo funkcija.


2. Kreiranje funkcije

Funkcija se kreira pomoću naredbe:

CREATE FUNCTION

Osnovna sintaksa izgleda ovako:

CREATE FUNCTION naziv_funkcije()
RETURNS tip_podatka
AS
BEGIN

    RETURN vrednost

END

Delovi funkcije:

  • CREATE FUNCTION → kreira funkciju

  • naziv_funkcije → ime funkcije

  • RETURNS → određuje tip rezultata

  • RETURN → vraća rezultat


Primer jednostavne funkcije

Napravimo funkciju koja vraća tekstualnu poruku.

CREATE FUNCTION fn_Pozdrav()
RETURNS VARCHAR(50)
AS
BEGIN

    RETURN 'Dobrodošli u bazu podataka'

END

Poziv funkcije

Funkcija se poziva pomoću SELECT naredbe.

SELECT dbo.fn_Pozdrav();

Rezultat:

Dobrodošli u bazu podataka

Ovde:

  • dbo predstavlja šemu baze,

  • fn_Pozdrav() naziv funkcije.


Uklanjanje funkcije

Ako funkcija više nije potrebna, može se obrisati.

Sintaksa:

DROP FUNCTION naziv_funkcije;

Primer:

DROP FUNCTION fn_Pozdrav;

Nakon toga funkcija više ne postoji u bazi.


3. Funkcije koje vraćaju jednu vrednost (Scalar Functions)

Najčešći tip funkcija su funkcije koje vraćaju jednu vrednost.

One mogu vratiti: broj, tekst, datum, logičku vrednost.

Zovu se scalar funkcije.


Primer 1 – Broj filmova:  Napravićemo funkciju koja vraća ukupan broj filmova.

CREATE FUNCTION fn_BrojFilmova()
RETURNS INT
AS
BEGIN

    DECLARE @broj INT;

    SELECT @broj = COUNT(*)
    FROM Film;

    RETURN @broj;

END

Poziv funkcije

SELECT dbo.fn_BrojFilmova();


Objašnjenje

Funkcija:

  1. definiše promenljivu @broj

  2. broji filmove

  3. smešta rezultat u promenljivu

  4. vraća rezultat


Primer 2 – Funkcija sa parametrom

Često želimo da funkcija radi sa različitim podacima. U tu svrhu koristimo parametre.

Primer:

CREATE FUNCTION fn_NazivFilma
(
    @id INT
)
RETURNS VARCHAR(100)
AS
BEGIN

    DECLARE @naziv VARCHAR(100);

    SELECT @naziv = Naziv
    FROM Film
    WHERE FilmID = @id;

    RETURN @naziv;

END

Poziv funkcije

SELECT dbo.fn_NazivFilma(3);

Rezultat:

Kum

Kada koristiti scalar funkcije?

Koriste se kada želimo: jednu vrednost, kao na primer izračunavanje rezultata, i kada želimo pojednostavljenje upita.

Na primer: broj učenika, naziv filma, cena proizvoda, datum nečega.


4. Funkcije koje vraćaju tabelu (Table-Valued Functions)

Neke funkcije ne vraćaju samo jednu vrednost, već više redova podataka. Takve funkcije vraćaju tabelu.

Možemo ih posmatrati kao:

„SELECT upit koji je pretvoren u funkciju“


Sintaksa

CREATE FUNCTION naziv()
RETURNS TABLE
AS
RETURN
(
    SELECT ...
)

Primer 1 – Lista filmova

CREATE FUNCTION fn_Filmovi()
RETURNS TABLE
AS
RETURN
(
    SELECT Naziv, DatumIzlaska
    FROM Film
)

Poziv funkcije

Poziva se kao tabela:

SELECT *
FROM dbo.fn_Filmovi();

Primer 2 – Funkcija sa parametrom

Prikaz filmova jednog žanra.

CREATE FUNCTION fn_FilmoviPoZanru
(
    @zanrID INT
)
RETURNS TABLE
AS
RETURN
(
    SELECT Naziv
    FROM Film
    WHERE ZanrID = @zanrID
)

Poziv funkcije

SELECT *
FROM dbo.fn_FilmoviPoZanru(2);

Prednosti funkcija koje vraćaju tabelu

  • pregledniji kod
  • mogu se koristiti kao tabela
  • pojednostavljuju složene upite

Razlika između funkcija koje vraćaju jednu vrednost i tabelu

Scalar funkcija Table-valued funkcija
vraća jednu vrednost vraća više redova
koristi RETURNS INT, VARCHAR… koristi RETURNS TABLE
koristi RETURN vrednost koristi RETURN (SELECT)

Primeri za bazu A13_DVD

Funkcija koja vraća broj glumaca

CREATE FUNCTION fn_BrojGlumaca()
RETURNS INT
AS
BEGIN

    DECLARE @broj INT;

    SELECT @broj = COUNT(*)
    FROM Glumac;

    RETURN @broj;

END

Funkcija koja vraća sve producente

CREATE FUNCTION fn_Producenti()
RETURNS TABLE
AS
RETURN
(
    SELECT *
    FROM Producent
)

Zadaci

Zadatak 1 - Napraviti funkciju koja vraća broj žanrova.


Zadatak 2 - Napraviti funkciju koja vraća naziv glumca na osnovu ID-a.


Zadatak 3 - Napraviti funkciju koja vraća sve filmove.


Zadatak 4 - Napraviti funkciju koja vraća filmove određenog producenta.


Zadatak 5 - Obrisati jednu kreiranu funkciju.


Zaključak - najvažnije što treba zapamtiti:
  • funkcije izvršavaju određeni zadatak,

  • mogu vraćati jednu vrednost ili tabelu,

  • mogu imati parametre,

  • kreiraju se jednom, a koriste više puta.

Funkcije omogućavaju da baza podataka postane fleksibilnija, preglednija i lakša za održavanje.

Last modified: Friday, 22 May 2026, 9:45 AM