Садржај
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 База података за продавницу - нерешени пројектни рад

Курсори и гранање - задаци

Често постоји потреба да извршимо одређену процену и обраду података које узимамо из базе, тако да се у програмима често користи наредба гранања уз употребу курсора.

Програми се пишу у едитору у оквиру онлајн окружења Oracle APEX, а покрећу се кликом на дугме Run:

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

../_images/slika_73a.jpg
  1. Приказати имена, презимена и плате свих запослених у библиотеци. Приказати и поруке у случају да запослени има мала примања (испод 50.000 динара), или велика примања (70.000 динара и више).

DECLARE
    v_zaposleni VARCHAR2(150);
    v_plata zaposleni.plata%TYPE;
    CURSOR kursor_zaposleni IS SELECT ime||' '||prezime, plata FROM zaposleni;
BEGIN
    OPEN kursor_zaposleni;
    LOOP
        FETCH kursor_zaposleni INTO v_zaposleni, v_plata;
        EXIT WHEN kursor_zaposleni%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Ime i prezime: '||v_zaposleni);
        DBMS_OUTPUT.PUT_LINE('Plata: '|| v_plata ||' RSD');
        IF v_plata < 50000 THEN
        DBMS_OUTPUT.PUT_LINE('Zaposleni ima mala primanja');
        ELSIF v_plata >= 70000 THEN
        DBMS_OUTPUT.PUT_LINE('Zaposleni ima velika primanja');
        END IF;
        DBMS_OUTPUT.PUT_LINE('- - -');
    END LOOP;
    CLOSE kursor_zaposleni;
END
../_images/slika_89a.jpg

Следи решење задатка помоћу циклуса FOR. У решењу се користи сложена променљива v_red која садржи три поља: име, презиме и плату запосленог. Ова променљива не мора да се декларише.

DECLARE
    CURSOR kursor_zaposleni IS SELECT ime, prezime, plata FROM zaposleni;
BEGIN
    FOR v_red IN kursor_zaposleni LOOP
        DBMS_OUTPUT.PUT_LINE('Ime i prezime: '||v_red.ime || ' ' ||v_red.prezime);
        DBMS_OUTPUT.PUT_LINE('Plata: '|| v_red.plata ||' RSD');
        IF v_red.plata < 50000 THEN
        DBMS_OUTPUT.PUT_LINE('Zaposleni ima mala primanja');
        ELSIF v_red.plata >= 70000 THEN
        DBMS_OUTPUT.PUT_LINE('Zaposleni ima velika primanja');
        END IF;
        DBMS_OUTPUT.PUT_LINE('- - -');
    END LOOP;
END
  1. Приказати имена, презимена и плате свих запослених у библиотеци. Приказати и поруку за сваког запосленог да ли зарађује више или мање од унетог износа. Износ се уноси са тастатуре.

DECLARE
    CURSOR kursor_zaposleni IS SELECT ime, prezime, plata FROM zaposleni;
    v_iznos NUMBER;
BEGIN
    v_iznos := :IZNOS;
    FOR v_red IN kursor_zaposleni LOOP
        DBMS_OUTPUT.PUT_LINE('Ime i prezime: '||v_red.ime || ' ' ||v_red.prezime);
        DBMS_OUTPUT.PUT_LINE('Plata: '|| v_red.plata ||' RSD');
        IF v_red.plata < v_iznos THEN
        DBMS_OUTPUT.PUT_LINE('Zaradjuje manje');
        ELSE
        DBMS_OUTPUT.PUT_LINE('Zaradjuje vise');
        END IF;
        DBMS_OUTPUT.PUT_LINE('- - -');
    END LOOP;
END
  1. Приказати имена, презимена и плате свих запослених у библиотеци. Приказати и поруку за сваког запосленог, да ли зарађује више или мање од просечне плате свих запослених.

DECLARE
    CURSOR kursor_zaposleni IS SELECT ime, prezime, plata FROM zaposleni;
    v_prosek zaposleni.plata%TYPE;
BEGIN
    SELECT AVG(plata) INTO v_prosek FROM zaposleni;
    FOR v_red IN kursor_zaposleni LOOP
        DBMS_OUTPUT.PUT_LINE('Ime i prezime: '||v_red.ime || ' ' ||v_red.prezime);
        DBMS_OUTPUT.PUT_LINE('Plata: '|| v_red.plata ||' RSD');
        IF v_red.plata < v_prosek THEN
        DBMS_OUTPUT.PUT_LINE('Zaradjuje manje od proseka');
        ELSE
        DBMS_OUTPUT.PUT_LINE('Zaradjuje vise od proseka');
        END IF;
        DBMS_OUTPUT.PUT_LINE('- - -');
    END LOOP;
END
  1. Приказати за сваку позајмицу име и презиме члана, назив књиге и број дана од узимања до враћања књиге у библиотеку. Приказати одговарајућу поруку за текуће позајмице

DECLARE
    CURSOR kursor_pozajmica
        IS SELECT ime, prezime, naziv, datum_uzimanja, datum_vracanja FROM pozajmice
        JOIN primerci USING (inventarski_broj) JOIN knjige USING (id_knjige)
        JOIN clanovi USING (broj_clanske_karte);
BEGIN
    FOR v_red_pozajmica IN kursor_pozajmica LOOP
        DBMS_OUTPUT.PUT_LINE('Clan: '||v_red_pozajmica.ime || ' ' ||v_red_pozajmica.prezime);
        DBMS_OUTPUT.PUT_LINE('Knjiga: '||v_red_pozajmica.naziv);
        IF v_red_pozajmica.datum_vracanja IS NULL THEN
        DBMS_OUTPUT.PUT_LINE('Pozajmica u toku - knjiga se nalazi kod clana.');
        ELSE
        DBMS_OUTPUT.PUT_LINE('Broj dana: ' ||
        ROUND(v_red_pozajmica.datum_vracanja - v_red_pozajmica.datum_uzimanja));
        END IF;
        DBMS_OUTPUT.PUT_LINE(' ');
    END LOOP;
END
  1. Приказати све позајмице за сваког члана. Приказати назив књиге и број дана од узимања до враћања књиге у библиотеку. Приказати одговарајућу поруку за текуће позајмице, као и поруку у случају да је књига задржана дуже од 10 дана.

DECLARE
    CURSOR kursor_clan
        IS SELECT broj_clanske_karte, ime||' '||prezime clan FROM clanovi;
    CURSOR kursor_pozajmica (p_broj_clanske_karte clanovi.broj_clanske_karte%TYPE)
        IS SELECT datum_uzimanja, datum_vracanja, naziv FROM pozajmice JOIN primerci USING (inventarski_broj)
        JOIN knjige USING (id_knjige) WHERE broj_clanske_karte=p_broj_clanske_karte;
BEGIN
    FOR v_red_clan IN kursor_clan LOOP
        DBMS_OUTPUT.PUT_LINE('Ime i prezime clana: '||v_red_clan.clan);
        FOR v_red IN kursor_pozajmica(v_red_clan.broj_clanske_karte) LOOP
        DBMS_OUTPUT.PUT_LINE('   Naziv knjige: '||v_red.naziv);
        IF v_red.datum_vracanja IS NULL THEN
            DBMS_OUTPUT.PUT_LINE('   Pozajmica u toku - knjiga se nalazi kod clana.');
        ELSIF ROUND(v_red.datum_vracanja - v_red.datum_uzimanja) > 10 THEN
            DBMS_OUTPUT.PUT_LINE('   Knjiga je zadrzana duze od nedelju dana');
        ELSE
            DBMS_OUTPUT.PUT_LINE('   Broj dana: ' ||
            ROUND(v_red.datum_vracanja - v_red.datum_uzimanja));
        END IF;
        END LOOP;
        DBMS_OUTPUT.PUT_LINE(' ');
    END LOOP;
END
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+