Садржај
1 Релационе базе података
1.0 1 Релационе базе података
1.0 2 Релационе базе података - квиз
1.0 3 Веза један према више
1.0 4 Веза један према више - квиз
1.0 5 Веза више према више
1.0 6 Веза више према више - квиз
1.0 7 Алат за пројектовање
1.0 8 СУБП
1.0 9 Креирање базе на други начин
1.0 10 Још неке SQL команде
1.1 1 Упит SELECT
1.1 2 Упит SELECT - упит из једне табеле - задаци
1.1 3 Упит SELECT - упит из једне табеле - квиз
1.1 4 Упит SELECT - функције и подупити - задаци
1.1 5 Упит SELECT - функције и подупити - квиз
1.1 6 Упит SELECT - спајање - задаци
1.1 7 Упит SELECT - спајање - квиз
1.1 8 Упит SELECT - нерешени задаци
1.2 1 База података за библиотеку - креирање базе
1.2 2 БП Библиотека - Упит SELECT - упит из једне табеле - задаци
1.2 3 БП Библиотека - Упит SELECT - упит из једне табеле - нерешени задаци
1.2 4 БП Библиотека - Упит SELECT - спајање - задаци
1.2 5 БП Библиотека - Упит SELECT - спајање - нерешени задаци
1.2 6 БП Библиотека - Упит SELECT - функције и подупити - задаци
1.2 7 БП Библиотека - Упит SELECT - функције и подупити - нерешени задаци
1.3 1 База података за возачке дозволе - креирање базе
1.3 2 БП Возачке дозволе - Дијаграм и подаци - практичан рад
1.3 3 БП Возачке дозволе - Упит SELECT - задаци
1.3 4 БП Возачке дозволе - Упит SELECT - нерешени задаци
1.4 1 БП Филмови - Креирање базе - практични рад
1.4 2 БП Филмови - Дијаграм и подаци - практични рад
1.4 3 БП Филмови - Упит SELECT - задаци
1.4 4 БП Филмови - Упит SELECT - нерешени задаци
2 Писање програма унутар система за управљање базама података
2.0 1 Процедуре и команда INSERT
2.0 2 Процедуре и команде UPDATE и DELETE
2.0 3 Процедуре и команде INSERT, UPDATE, и DELETE - квиз
2.0 4 Процедуре и тестирање програма
2.0 5 Процедуре и упит SELECT
2.0 6 Процедуре и курсор за упит SELECT
2.1 1 Функције и упит SELECT
2.1 2 Процедуре и функције са упитом SELECT - квиз
2.1 3 Процедуре и функције са упитом SELECT из једне табеле - задаци
2.1 4 Процедуре и функције са упитом и групним функцијама - задаци
2.1 5 Процедуре и функције са упитом SELECT са спајањем табела - задаци
2.1 6 Процедуре и функције са упитом - нерешени задаци
2.1 7 Формат XML
2.2 1 База података за библиотеку - Процедуре, функције и поређење различитих решења
2.2 2 Процедуре, функције и поређење различитих решења
2.2 3 Процедуре и функције са упитом SELECT из једне табеле - вежбање
2.2 4 Процедуре и функције са упитом SELECT са спајањем табела - вежбање
2.2 5 Процедуре и функције са упитом и групним функцијама и подупитима - вежбање
2.2 6 Процедуре и функције са упитом SELECT - нерешени задаци
2.3 1 База података за возачке дозволе - процедуре и функције са упитом SELECT - вежбање
2.3 2 База података за возачке дозволе - процедуре и функције - нерешени задаци
2.4 1 База података за филмове - процедуре и функције са упитом SELECT - вежбање
2.4 2 База података за филмове - процедуре и функције - нерешени задаци
3 Писање програма у програмским језицима вишег нивоа
3.0 1 Писање програма у развојном окружењу Visual Studio
3.0 2 Писање програма у развојном окружењу Visual Studio - практичан рад
3.0 3 Писање програма у развојном окружењу Visual Studio - процедуре
3.0 4 Писање програма у развојном окружењу Visual Studio - квиз
3.1 1 Угнежђени упит SELECT унутар програма
3.1 2 Угнежђени упит SELECT унутар програма - задаци
3.1 3 Позив процедуре унутар програма
3.1 4 Позив креиране функције унутар програма
3.1 5 Програм са угнежђеним командама у развојном окружењу Visual Studio - квиз
3.1 6 Програм са угнежђеним упитом SELECT из једне табеле - вежбање
3.1 7 Програм са угњежђеним упитом и групним фунцкијама - вежбање
3.1 8 Програм са угнежђеним упитом SELECT са спајањем табела - вежбање
3.1 9 Програм са класом
3.1 10 Програм са угнежђеним упитом - нерешени задаци
3.1 11 Програм са угнежђеним командама INSERT, UPDATE, и DELETE
3.2 1 База података за библиотеку - програм са угнежђеним упитом SELECT из једне табеле - задаци
3.2 2 База података за библиотеку - програм са угнежђеним упитом SELECT - вежбање
3.2 3 База података за библиотеку - програм са угнежђеним упитом - нерешени задаци
3.3 1 База података за возачке дозволе - програм са угнежђеним упитом SELECT - вежбање
3.3 2 База података за возачке дозволе - програм са угнежђеним упитом - нерешени задаци
3.4 1 База података за филмове - програм са угнежђеним упитом SELECT - вежбање
3.4 2 База података за филмове - програм са угнежђеним упитом - нерешени задаци
4 Друга софтверска решења - СУБП Oracle
4.0 1 Oracle Apex и језик PL/SQL
4.0 2 Језик PL/SQL - задаци
4.0 3 Језик PL/SQL - квиз
4.0 4 Језик PL/SQL – нерешени задаци
4.0 5 Наредбе гранања
4.0 6 Наредбе гранања - нерешени задаци
4.0 7 Наредбе циклуса
4.0 8 Наредбе циклуса - нерешени задаци
4.1 1 База података за библиотеку - практичан рад
4.1 2 Наредба SELECT INTO
4.1 3 Наредба SELECT INTO - zadaci
4.1 4 Наредба SELECT INTO - квиз
4.1 5 Наредба SELECT INTO - вежбање
4.1 6 Наредба SELECT INTO - нерешени задаци
4.2 1 Курсори - Узимање података из више редова
4.2 2 Курсори - задаци
4.2 3 Различити начини да се реши проблем
4.2 4 Курсори - нерешени задаци
4.2 5 Курсор са параметром
4.2 6 Курсор са параметром - задаци
4.2 7 Курсор са параметром - нерешени задаци
4.2 8 Курсори - квиз
4.2 9 Курсори и гранање - задаци
4.2 10 Курсори - вежбање
4.2 11 Тренутне позајмице члана - пример
4.2 12 Спискови књига - пример
4.3 1 Процедуре и функције у СУБП-у Oracle Apex
4.3 2 Процедуре и функције - задаци
4.3 3 Процедуре и функције - нерешени задаци
4.3 4 Позајмице једне књиге - пример
4.3 5 Тренутне позајмице - пример
4.3 6 Процедуре и друге SQL команде
4.3 7 Тригери
4.3 8 Списак свих објеката у бази података
4.4 1 Креирање апликације помоћу алата App Builder
4.4 2 Додатне опције App Builder алата
4.4 3 Покретање апликације
4.4 4 Креирање нових страница у апликацији
4.4 5 Покретање раније креиране процедуре
4.4 6 Алат App Builder и XML
4.5 1 База података за салон аутомобила у СУБП-у Oracle Apex - 1. део
4.5 2 База података за салон аутомобила у СУБП-у Oracle Apex - 2. део
4.5 3 База података за салон аутомобила у СУБП-у Oracle Apex - 3. део
4.5 4 База података за продавницу - нерешени пројектни рад

База података за возачке дозвлоле - процедуре и функције са упитом SELECT - вежбање

Решити следеће задатке писањем процедуре или функције и програмског кода у којем се креирана процедура или функција позива.

Приликом решавања задатака, погледајте претходно решене примере. Након што решите неки задатак па желите да проверите да ли је решење добро или видите да не можете да га решите, можете да погледате решење које ће се приказати након што кликнете на дугме.

Детаљно објашњење формирања упита SELECT који треба да буде део процедуре или функције је дато раније у материјалима и по потреби је могуће вратити се на тај део као помоћ у писању комплетног решења.

Програмски код, као и команде језика SQL, пише се и покреће када се кликне New Query након што се покрене систем SQL Serve*r и кликне на креирану базу *Izdate_dozvole у прозору Object Explorer. Фајл са упитима SQLQuery1.sql може, а и не мора да се сачува.

Након што се унесе програмски код, кликне се на дугме Execute. Уколико се у простору за писање команди налази више блокова кода, потребно је обележити онај који желимо да покренемо. Ако имате више база података, обавезно проверите да ли је поред овог дугмета назив базе у којој желите да покрећете програме.

../_images/slika_531a.jpg

Сви приказани задаци су у вези са табелама које чине базу података за евиденцију издатих возачких дозвола. Следи списак свих табела са колонама. Примарни кључеви су истакнути болд, а страни италик.

../_images/slika_531b.jpg
  1. Приказати име и презиме особе чији је број возачке дозволе дат.

Процедура.

CREATE PROCEDURE osoba_kojoj_pripada_dozvola(@broj_dozvole CHAR(9))
AS
SELECT ime, prezime
FROM vozacke_dozvole
WHERE broj_dozvole=@broj_dozvole

Позив процедуре.

EXEC osoba_kojoj_pripada_dozvola @broj_dozvole='000123175'
../_images/slika_531c.jpg
  1. Приказати податке о возачким дозволама које обухватају категорију са датом ознаком, као и датум када су стечене.

Функција.

CREATE FUNCTION dozvole_odredjene_kategorije (@oznaka VARCHAR(3))
RETURNS TABLE
AS
RETURN SELECT vd.broj_dozvole, vd.prezime, vd.ime, vd.datum_izdavanja,
vd.datum_prestanka, kd.datum_sticanja
FROM vozacke_dozvole vd
JOIN kategorije_dozvole kd ON (kd.id_dozvole=vd.id)
JOIN kategorije k ON (kd.id_kategorije=k.id)
WHERE k.oznaka = @oznaka;

Позив функције.

SELECT * FROM dozvole_odredjene_kategorije('B')

Други позив функције.

SELECT datum_prestanka FROM dozvole_odredjene_kategorije('B')
ORDER BY datum_prestanka
  1. Приказати податке о свим категоријама на дозволи са датим бројем.

Процедура.

CREATE PROCEDURE oznake_na_dozvoli @broj_dozvole VARCHAR(9)
AS
SELECT oznaka
FROM vozacke_dozvole vd JOIN kategorije_dozvole kd
ON (kd.id_dozvole=vd.id)
JOIN kategorije k ON (kd.id_kategorije=k.id)
WHERE broj_dozvole = @broj_dozvole;

Позив процедуре.

EXEC oznake_na_dozvoli @broj_dozvole='001560375'
  1. Приказати све категорије које су стечене пре одређеног датума. Резултат уредити по ознаци категорије. Приказати име и презиме особе и датум стицања категорије.

Упит којим смо раније решили овај задатак даје табеларни приказ података.

SELECT oznaka, ime, prezime, datum_sticanja
FROM kategorije JOIN kategorije_dozvole
ON (kategorije_dozvole.id_kategorije=kategorije.id)
JOIN vozacke_dozvole ON (kategorije_dozvole.id_dozvole=vozacke_dozvole.id)
WHERE datum_sticanja<'2020-01-01'
ORDER BY oznaka

Можемо да креирамо процедуру са курсорима која ће приказати тражене податке лепо уређене по категоријама.

CREATE PROCEDURE kategorije_stecene_pre_datuma @datum DATE
AS
--izdvajamo kategorije koje su stecene pre datog datuma
DECLARE kursor_kategorije CURSOR FOR
SELECT DISTINCT id, oznaka
FROM kategorije_dozvole JOIN kategorije
ON (kategorije_dozvole.id_kategorije=kategorije.id)
WHERE datum_sticanja<@datum;
DECLARE @id INT;
DECLARE @oznaka VARCHAR(3);

OPEN kursor_kategorije;
FETCH NEXT FROM kursor_kategorije INTO @id, @oznaka;

WHILE @@FETCH_STATUS=0
BEGIN
    PRINT 'OZNAKA: '+@oznaka;

    --sve osobe koje su odredjenu oznaku
    --stekle pre datog datuma
    DECLARE kursor_osobe CURSOR FOR
    SELECT ime, prezime, datum_sticanja
    FROM kategorije_dozvole JOIN vozacke_dozvole
    ON (kategorije_dozvole.id_dozvole=vozacke_dozvole.id)
    WHERE datum_sticanja<@datum AND id_kategorije=@id;
    DECLARE @ime VARCHAR(32);
    DECLARE @prezime VARCHAR(32);
    DECLARE @datum_sticanja DATE;

    OPEN kursor_osobe;
    FETCH NEXT FROM kursor_osobe
    INTO @ime, @prezime, @datum_sticanja;
    WHILE @@FETCH_STATUS=0
    BEGIN
        PRINT ' Osoba: '+@ime+' '+@prezime;
        PRINT ' Datum sticanja: '+CAST(@datum_sticanja AS VARCHAR);
        FETCH NEXT FROM kursor_osobe
        INTO @ime, @prezime, @datum_sticanja;
    END;
    CLOSE kursor_osobe;
    DEALLOCATE kursor_osobe;

    FETCH NEXT FROM kursor_kategorije INTO @id, @oznaka;
END

CLOSE kursor_kategorije;
DEALLOCATE kursor_kategorije;

Позив процедуре.

EXEC kategorije_stecene_pre_datuma @datum='2020-01-01'
  1. Приказати списак различитих категорија (ознака) за које имамо издате возачке дозволе у датом граду.

Процедура.

CREATE PROCEDURE spisak_oznaka_u_gradu @grad VARCHAR(32)
AS
SELECT DISTINCT oznaka
FROM kategorije JOIN kategorije_dozvole
ON (kategorije_dozvole.id_kategorije=kategorije.id)
JOIN vozacke_dozvole ON (kategorije_dozvole.id_dozvole=vozacke_dozvole.id)
JOIN gradovi ON (vozacke_dozvole.id_grada=gradovi.id)
WHERE gradovi.naziv=@grad;

Позив процедуре.

EXEC spisak_oznaka_u_gradu @grad='BEOGRAD'
  1. Приказати број различитих категорија (ознака) за које имамо издате возачке дозволе у датом граду.

Функција.

CREATE FUNCTION broj_oznaka_u_gradu (@grad VARCHAR(32))
RETURNS INT
AS
BEGIN
    DECLARE @broj INT;
    SELECT @broj = COUNT(DISTINCT oznaka)
    FROM kategorije JOIN kategorije_dozvole
    ON (kategorije_dozvole.id_kategorije=kategorije.id)
    JOIN vozacke_dozvole ON (kategorije_dozvole.id_dozvole=vozacke_dozvole.id)
    JOIN gradovi ON (vozacke_dozvole.id_grada=gradovi.id)
    WHERE gradovi.naziv=@grad;
    RETURN @broj;
END;

Позив функције.

PRINT dbo.broj_oznaka_u_gradu('BEOGRAD')
  1. Приказати за сваку возачку дозволу број категорија које покрива.

Функција која враћа табелу.

CREATE FUNCTION broj_kategorija_po_dozvoli()
RETURNS TABLE
AS
RETURN SELECT broj_dozvole, COUNT(id_kategorije) AS broj_kategorija
FROM kategorije_dozvole
JOIN vozacke_dozvole ON (kategorije_dozvole.id_dozvole=vozacke_dozvole.id)
GROUP BY broj_dozvole

Позив функције.

SELECT * FROM  broj_kategorija_po_dozvoli()
  1. Приказати возачке дозволе које покривају више категорија.

Већ смо за претходни задатак креирали функцију коју можемо да позовемо тако да се прикажу возачке дозволе које покривају више категорија.

SELECT * FROM  broj_kategorija_po_dozvoli()
WHERE broj_kategorija>1
  1. Приказати за сваку возачку дозволу све категорије које покрива.

Процедура.

CREATE PROCEDURE sve_dozvole_i_kategorije
AS
DECLARE kursor_dozvole CURSOR FOR
SELECT id, broj_dozvole, ime, prezime
FROM vozacke_dozvole;
DECLARE @id_dozvole INT;
DECLARE @broj_dozvole CHAR(9);
DECLARE @ime VARCHAR(32);
DECLARE @prezime VARCHAR(32);

OPEN kursor_dozvole;
FETCH NEXT FROM kursor_dozvole
INTO @id_dozvole, @broj_dozvole, @ime, @prezime;

WHILE @@FETCH_STATUS=0
BEGIN
    PRINT 'DOZVOLA: '+@broj_dozvole;
    PRINT @ime+' '+@prezime;

    DECLARE kursor_kategorije CURSOR FOR
    SELECT oznaka FROM kategorije JOIN kategorije_dozvole
    ON (kategorije_dozvole.id_kategorije=kategorije.id)
    WHERE id_dozvole=@id_dozvole;
    DECLARE @oznaka VARCHAR(3);

    OPEN kursor_kategorije;
    FETCH NEXT FROM kursor_kategorije
    INTO @oznaka;
    WHILE @@FETCH_STATUS=0
    BEGIN
        PRINT '  '+@oznaka;
        FETCH NEXT FROM kursor_kategorije
        INTO @oznaka;
    END;
    CLOSE kursor_kategorije;
    DEALLOCATE kursor_kategorije;

    FETCH NEXT FROM kursor_dozvole
    INTO @id_dozvole, @broj_dozvole, @ime, @prezime;
END

CLOSE kursor_dozvole;
DEALLOCATE kursor_dozvole;

Позив процедуре.

EXEC sve_dozvole_i_kategorije
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+