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

Тригери

До сада смо видели како се програмски језик PL/SQL користи за писање процедура и функција. Процедуре и функције су именовани подпрограми које можемо да позивамо у другим програмима. Понекад, међутим, имамо ситуације у којима је потребно да се нешто аутоматски изврши. На пример, да се спречи брисање података или да остане забележено које су измене учињене у табелама. За овакве ситуације је потребно креирати тригере. Они се везују за одређене команде и извршавају се аутоматски, без посебног позивања, када се изврше команде за које су везани.

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

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

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

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

CREATE TABLE info_promena_plata(
id NUMBER,
stara_plata NUMBER,
nova_plata NUMBER,
datum_izmene DATE)

Креираћемо тригер који ће, када дође до промене плате, унети жељене податке у помоћну табелу. Користимо речи :OLD и :NEW да приступимо старој и новој вредности плате после извршења измене. Промена плате позивом једне команде UPDATE је могућа у једном реду или у више редова, на пример, повећање плате свима којима је менаџер дата особа. Како је битно забележити све појединачне измене у сваком реду, у овој врсти тригера се пише FOR EACH ROW.

CREATE OR REPLACE TRIGGER promena_plate_triger
AFTER UPDATE of plata on zaposleni
FOR EACH ROW
BEGIN
INSERT INTO info_promena_plata(id, stara_plata, nova_plata, datum_izmene)
VALUES (:OLD.id, :OLD.plata, :NEW.plata, SYSDATE);
END;

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

SELECT plata FROM zaposleni WHERE id=5

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

UPDATE zaposleni
SET plata = 70000
WHERE id=5

Када погледамо поново садржај табеле zaposleni, видећемо нови износ плате.

Када се извршила команда UPDATE, аутоматски је извршен и тригер који смо креирали. Можемо да покренемо следећи упит и видимо да су информације о овој измени унете у помоћну табелу.

SELECT * FROM info_promena_plata
../_images/slika_97a.jpg

Упис информација о промени података у бази имао је смисла након што се измена догодила. Зато смо приликом креирања тригера навели AFTER UPDATE.

Постоје ситуације у којима нам је важно да се тригер изврши пре неке команде. На пример, уколико желимо да спречимо брисање запосленог који има највишу позицију, потребно је да приликом креирања тригера наведемо BEFORE DELETE. Да би се спречило брисање, потребно је да зауставимо рад програма тако што ћемо да испалимо изузетак са одговарајућом поруком уколико је запослени којег покушавамо да обришемо онај који нема менаџера изнад себе. Брисање се неће извршити.

CREATE OR REPLACE TRIGGER zabranjeno_brisanje
BEFORE DELETE ON zaposleni
FOR EACH ROW
BEGIN
IF (:OLD.id_menadzera IS NULL)
THEN RAISE_APPLICATION_ERROR(-20555, 'Nije dozvoljeno brisanje');
END IF;
END;
../_images/slika_97b.jpg
(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+