×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

5.8.6. Триггеры на языке PL/Perl

Язык PL/Perl может использоваться для написания триггерных функций. В триггерной функции ссылка на хеш $_TD содержит информацию о текущем событии триггера. $_TD — это глобальная переменная, которая получает отдельное локальное значение при каждом вызове триггера. Поля $_TD ссылки на хеш:

$_TD->{new}{foo}

NEW значение столбца foo

$_TD->{old}{foo}

OLD значение столбца foo

$_TD->{name}

Имя вызываемого триггера

$_TD->{event}

Событие триггера: INSERT, UPDATE, DELETE, TRUNCATEили UNKNOWN

$_TD->{when}

Указывает на время вызова триггера: BEFORE, AFTER, INSTEAD OF, или UNKNOWN

$_TD->{level}

Уровень срабатывания триггера: ROW, STATEMENTили UNKNOWN

$_TD->{relid}

OID таблицы, для которой сработал триггер

$_TD->{table_name}

Имя таблицы, для которой сработал триггер

$_TD->{relname}

Имя таблицы, для которой сработал триггер. Данный параметр является устаревшим, и может быть удалён в будущих версиях. Вместо этого следует использовать переменную $_TD->{table_name}.

$_TD->{table_schema}

Имя схемы, в которой находится таблица, вызвавшая срабатывание триггера

$_TD->{argc}

Количество аргументов функции триггера

@{$_TD->{args}}

Аргументы функции триггера. Переменная отсутствует, если $_TD->{argc} равно 0.

Триггеры уровня строки могут возвращать одно из следующих значений:

return;

Выполнить операцию

"SKIP"

Не выполнять операцию

"MODIFY"

Указывает на то, что NEW строка была изменена функцией триггера

Ниже приведен пример функции триггера, иллюстрирующий некоторые из вышеперечисленных положений:

CREATE TABLE test (
    i int,
    v varchar
);

CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
    if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
        return "SKIP";    # пропуск команды INSERT/UPDATE
    } elsif ($_TD->{new}{v} ne "immortal") {
        $_TD->{new}{v} .= "(modified by trigger)";
        return "MODIFY";  # изменение строки и выполнение команды INSERT/UPDATE
    } else {
        return;           # выполнение команды INSERT/UPDATE
    }
$$ LANGUAGE plperl;

CREATE TRIGGER test_valid_id_trig
    BEFORE INSERT OR UPDATE ON test
    FOR EACH ROW EXECUTE FUNCTION valid_id();

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению