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

Процедуре и команде UPDATE и DELETE

Видели смо како се креирају процедуре помоћу којих можемо да унесемо податке у базу. Унутар процедура могу да се користе и команде за измену и брисање података.

Погледаћемо неколико једноставних примера.

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

../_images/slika_512a.jpg

Узмимо, на пример, да желимо да креирамо процедуру која ће да нам омогући да изменимо адресу веб-сајта издавача уколико је то потребно. Можда нисмо имали адресу веб-сајта када смо унели издавача у базу први пут, а можда је издавач променио веб-сајт.

Типови података параметара су исти као типови података одговарајућих колона.

CREATE PROCEDURE izmena_veb_sajta
@izdavac varchar(40), @novi_sajt varchar(50)
AS
    UPDATE izdavaci
    SET veb_sajt = @novi_sajt
    WHERE naziv = @izdavac

Након што се покрене програмски код тако што се кликне на дугме Execute, процедура може да се позове за конкретне вредности. Када смо додали књигу новог издавача, није у базу уписана и адреса његовог веб-сајта, па позивом креиране процедуре можемо да извршимо измену у том реду. Вредности које се наводе у позиву процедуре ће се употребити у извршавању команде UPDATE која се налази у процедури.

EXEC izmena_veb_sajta @izdavac='LOM', @novi_sajt='https://lombooks.com/'

На овај начин смо написали програмски код који се прилагођава различитим потребама и не морамо сваки пут, за измену адресе веб-сајта различитих издавача, да пишемо посебне UPDATE команде.

Следећи пут можемо процедуру да позовемо за другог издавача.

EXEC izmena_veb_sajta @izdavac='Zavod za udzbenike',
@novi_sajt='https://www.knjizara.zavod.co.rs/udzbenici/udzbenici-za-srednju/'

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

За параметар процедуре има смисла да користимо назив књиге. У том случају, потребно је да унутар процедуре декларишемо променљиву @id_knjige и потребан нам је упит SELECT којим у ту променљиву уписујемо идентификациони број књиге. Овај идентификациони број нам треба да бисмо могли да обришемо све примерке те књиге.

SELECT @id_knjige = id_knjige FROM knjige
WHERE naziv = @naziv_knjige;

За одређену књигу највероватније имамо и ред или редове у табели autori_knjige којима је повезујемо са аутором или ауторима, па и те редове треба да обришемо.

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

CREATE PROCEDURE brisanje_knjige @naziv_knjige varchar(50)
AS
    DECLARE @id_knjige int;
    SELECT @id_knjige = id_knjige FROM knjige
    WHERE naziv = @naziv_knjige;
    DELETE FROM primerci
    WHERE id_knjige = @id_knjige;
    DELETE FROM autori_knjige
    WHERE id_knjige = @id_knjige;
    DELETE FROM knjige
    WHERE id_knjige = @id_knjige;

Можемо да напишемо и решење које не захтева помоћну променљиву @id_knjige, али у том случају на два места морамо да користимо подупит. Уколико желите да пробате следећи код, потребно је да обришете претходну процедуру, или да је измените када изаберете ставку Modify са менија који се појави када се кликне десни тастер миша над већ креираном процедуром.

CREATE PROCEDURE brisanje_knjige @naziv_knjige varchar(50)
AS
    DELETE FROM primerci
    WHERE id_knjige = (SELECT id_knjige FROM knjige
        WHERE naziv = @naziv_knjige);
    DELETE FROM autori_knjige
    WHERE id_knjige = (SELECT id_knjige FROM knjige
        WHERE naziv = @naziv_knjige);
    DELETE FROM knjige
    WHERE naziv = @naziv_knjige;

Не морате да извршите следећу команду да не бисте непотребно обрисали податке из базе.

Процедуру можемо да позовемо на следећи начин.

EXEC brisanje_knjige @naziv_knjige='Osnovi programiranja, programski jezici c#';

У овом примеру треба обратити пажњу на један детаљ. Следећа команда ће радити само уколико имамо само једну књигу са траженим називом. У том случају ће се исправно попунити вредност у променљивој @id_knjige и биће постављена на идентификациони број баш те једне књиге.

SELECT @id_knjige = id_knjige FROM knjige WHERE naziv = @naziv_knjige;

Ако има више књига са истим називом, на пример, имамо више књига Рачунарство и информатика за 4. разред гимназије, које су све уџбеници за исти предмет али од различитих издавача, овај програмски код неће радити. То и има смисла, зато што ми сигурно, када уклањамо једну књигу из библиотеке, не желимо да уклонимо и све примерке неке друге књиге која се зове исто.

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

CREATE PROCEDURE brisanje_knjige_id @id_knjige int
AS
    DELETE FROM primerci
    WHERE id_knjige = @id_knjige;
    DELETE FROM autori_knjige
    WHERE id_knjige = @id_knjige;
    DELETE FROM knjige
    WHERE id_knjige = @id_knjige;

Ову процедуру можемо да позовемо на следећи начин.

EXEC brisanje_knjige_id @id_knjige=321;

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

CREATE PROCEDURE brisanje_knjige_id @id_knjige int
AS
    DECLARE @broj_primeraka int;
    SELECT @broj_primeraka = COUNT(*) FROM primerci
    WHERE id_knjige = @id_knjige;
    DELETE FROM primerci
    WHERE id_knjige = @id_knjige;
    DELETE FROM autori_knjige
    WHERE id_knjige = @id_knjige;
    DELETE FROM knjige
    WHERE id_knjige = @id_knjige;
    IF @broj_primeraka=0
        PRINT 'Nije bilo primeraka ove knjige u biblioteci';
    ELSE
        PRINT 'Broj obrisanih primeraka: '+ CAST(@broj_primeraka AS VARCHAR(10));

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

Комплетан програмски код за проверу да ли има књига и брисање издавача стављамо у TRY блок. Ако има књига тог издавача, брисање не може да се догоди и враћамо -1 као вредност грешке. Ако нема књига, извршавамо брисање и враћамо нулу са значењем да није било грешака. У CATCH блоку враћамо програму у којем се ова процедура позива број грешке, тј. ERROR_NUMBER.

CREATE PROCEDURE brisanje_izdavaca @id_izdavaca int
AS
--provera da li ima knjiga tog izdavaca u bazi
BEGIN TRY
IF EXISTS (SELECT id_knjige FROM knjige
        WHERE id_izdavaca=@id_izdavaca)
BEGIN
    RETURN -1;
END
ELSE
--nema knjiga tog izdavaca, moze da se brise
    BEGIN
        DELETE FROM izdavaci
        WHERE id=@id_izdavaca;
        RETURN 0;
    END
END TRY
BEGIN CATCH
    --greska prilikom brisanja
    RETURN ERROR_NUMBER();
END CATCH

Ако позовемо процедуру за издавача са идентификационим бројем 2 чије књиге имамо у библиотеци, видећемо да није дошло до брисања и у прозору Messages ће бити приказан број грешке.

DECLARE @rezultat int;
EXEC @rezultat = brisanje_izdavaca @id_izdavaca=2;
PRINT @rezultat;
../_images/slika_512b.jpg

Можемо у базу да додамо новог издавача без додавања књига тог издавача.

INSERT INTO izdavaci
VALUES (10, 'Kreativni centar', null, null)

Ако сада позовемо процедуру за новододатог издавача чијих књига нема у библиотеци, у прозору Messages ће бити приказана порука да је дошло до промене стања у бази у једном реду, односно обрисан је један ред, и да није било грешке, тј. биће приказана нула као број грешке.

DECLARE @rezultat int;
EXEC @rezultat = brisanje_izdavaca @id_izdavaca=10;
PRINT @rezultat;
../_images/slika_512c.jpg
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+