Практическая часть
Задание:
Создать динамическую процедуру,
изменяющую значения заработной платы
сотрудников на указанный в аргументе
процент, адрес офиса с сотрудниками
получающими надбавку; указывать в
качестве второго входного аргумента.
Создаем
модуль, в котором будет находится наша
процедура:
CREATE
OR REPLACE PACKAGE my_paketik AS
PROCEDURE
nadbavka(p_percent IN NUMBER, p_address IN branch.bno%TYPE);
END
my_paketik;
/
Создаем
тело модуля с нужной процедурой:
CREATE
OR REPLACE PACKAGE BODY my_paketik AS
PROCEDURE
nadbavka(p_percent IN NUMBER, p_address IN branch.bno%TYPE) IS
p_cursor
INTEGER;
p_text
VARCHAR2(255);
p_update
NUMBER;
BEGIN
p_cursor
:= DBMS_SQL.OPEN_CURSOR;
p_text
:= 'UPDATE staff SET salary=salary*(l+:nec_percent/100) WHERE bno IN
(SELECT bno FROM branch WHERE bno=:nec_address) ';
DBMS_SQL.PARSE(p_cursor,
p_text,
DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(p_cursor,
':nec_percent', p_percent);
DBMS_SQL.BIND_VARIABLE(p_cursor,
':nec_address', p_address);
p_update:=
DBMS_SQL.EXECUTE(p_cursor);
DBMS_SQL.CLOSE_CURSOR(p_cursor);
EXCEPTION
WHEN
OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(p_cursor);
RAISE;
END
nadbavka;
END
my_paketik;
/
Выполняем
процедуру в модуле:
EXECUTE
my_paketik.nadbavka(10,4);
Экранная форма:

Вывод:
В
результате выполнения работы были
изучены объекты баз данных, такие как
модули, а также системные модули
DBMSOUTPUT
и DBMS
SQL,
предназначенных для отладки приложений
PL/SQL
и написания процедур динамической
обработки SQL-операторов.
Динамическая процедура INFORMATION
была создана для обработки и представления
средствами серверного вывода информации
о сотрудниках из таблицы STAFFX.
При вызове процедуры появляется список
сотрудников, по соответствующей
профессии, а также количество данных
записей.