Автор: Пользователь скрыл имя, 22 Декабря 2012 в 15:10, лекция
Триггер БД является именованным блоком PL/SQL и после компиляции хранится в соответствующих словарях данных БД. Триггер срабатывает при определенном событии, а именно при запуске операций DML — INSERT, UPDATE, DELETE.
Системные триггеры срабатывают на события самой БД.
Процедуры и функции PL/SQL
Анонимный блок PL/SQL каждый раз при выполнении компилируется. Он не хранится в базе данных и не может быть вызван из другого блока.
Именованные блоки — процедуры и функции хранятся в базе данных и могут быть использованы повторно.
Синтаксис объявления ПРОЦЕДУРЫ:
CREATE OR REPLACE PROCEDURE [имя процедуры] IS or AS
- Зона объявления переменных
BEGIN
- Выполняемый раздел
EXCEPTION
- Раздел исключительных ситуаций
END [имя процедуры]
DROP PROCEDURE имя – удаление процедуры
Запуск процедуры:
DECLARE
BEGIN
TESTPRGTWO;
END;
Пример процедуры с параметрами:
CREATE OR REPLACE PROCEDURE TESTPRM(NUM IN NUMBER) IS
COMP VARCHAR2(50);
BEGIN
SELECT Name INTO COMP
FROM artist
WHERE Artist.ArtistID = NUM;
DBMS^OUTPUT.enable;
DBMS_OUTPUT.put_line(in_COMP);
END TESTPRM;
IN в данном случае определяет,
что параметр является входным.
NUM является формальным параметром функции (formal parameters). А вот входное значение функции является фактическим параметром (actual parameters). Формальный параметр NUM, является только вместилищем для фактически передаваемого параметра и все операции производятся с формальным параметром.
Когда процедура завершается и управление передается в вызывающую среду, фактический параметр не изменяется.
OUT — любое значение, имеющее
фактический параметр при
IN OUT — этот вид представляет
собой комбинацию видов IN и
OUT. Значение фактического
Тело процедуры содержит
исполняемый код и
Накладывать ограничения на формальные параметры функций в PL/SQL — ЗАПРЕЩЕНО!
Как и все переменные формальные
параметры процедуры могут
имя_параметра [тип] := | DEFAULT исходное_значение
Функция это то же, что и процедура, она может принимать параметры по всем тем же правилам, что и процедуры, и кроме всего она может возвращать значения. В функции можно применять параметры с типом OUT.
Определение функции таково:
CREATE [OR REPLACE] FUNCTION – имя функции
(аргумент [IN] [OUT] [IN OUT] тип, … ) AS [IS]
тело процедуры
RETURN (возвращаемое значение)
После того, как команда CREATE OR REPLACE создает процедуру или функцию, она сразу сохраняется в БД, в скомпилированной форме, которая называется р-кодом (p-code). В р-коде содержатся все обработанные ссылки подпрограммы, а исходный текст преобразован, в вид удобный для чтения системой поддержки PL/SQL.
При вызове хранимой процедуры р-код считывается с диска и выполняется. Р-код аналогичен объектному коду генерируемому компиляторами языков программирования высокого уровня.
Удаление процедуры или функции:
DROP PROCEDURE имя_процедуры
DROP FUNCTION имя_функции
Вывод информации о наличии процедур:
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS /
Вывод текста хранимой процедуры или функции:
SELECT * FROM USER_SOURCE WHERE NAME = ‘имя процедуры’ /
Показать ошибки:
SHOW ERRORS
Команда SHOW ERRORS, считывает данные из системного представления USER_ERRORS.
Строковые и операторные триггеры
Триггер БД является именованным
блоком PL/SQL и после компиляции хранится
в соответствующих словарях данных
БД. Триггер срабатывает при
Системные триггеры срабатывают на события самой БД.
Применение триггеров:
Виды триггеров:
Прекращение работы триггера:
ALTER TRIGGER TESTTRG DISABLE
Удаление триггера:
DROP TRIGGER TESTTRG
Порядок срабатывания триггеров:
Псевдозаписи триггера
Псевдозаписи триггера:
Псевдозаписи – специальная структура, которая может быть использована внутри триггера.
С ними нельзя работать полноценно как с записями, так как их нельзя присвоить записям.
Псевдозаписи работают только в строковых триггерах.
В условии псевдозаписи записываются БЕЗ ДВОЕТОЧИЯ.
Триггерные предикаты
Предикат – выражение,
о котором можно сказать