Передача параметров в функцию триггера - PullRequest
0 голосов
/ 15 апреля 2019

Я не могу понять, как передать параметры в функцию триггера.

Я проверил документацию и увидел, что функции триггера не принимают параметры обычным способом, но не смог найти примертриггерной функции pl-sql, которая использовала исходные данные строки внутри функции.

Мой пример:

CREATE TABLE emp (
    id serial,
    empname text,
    salary integer,
    last_date timestamp,
    last_user text
);



CREATE FUNCTION emp_stamp() RETURNS trigger AS '
    BEGIN
        -- Check that empname and salary are given
        IF NEW.empname IS NULL THEN
            RAISE EXCEPTION ''empname cannot be null'';
        END IF;
        IF NEW.salary IS NULL THEN
            RAISE EXCEPTION ''% cannot have null salary'', NEW.empname;
        END IF;



        -- Who works for us when she must pay for it?
        IF NEW.salary < 0 THEN
            RAISE EXCEPTION ''% cannot have a negative salary'', NEW.empname;
        END IF;



        -- Remember who changed the payroll when
        NEW.last_date := ''now'';
        NEW.last_user := current_user;
        RETURN NEW;
    END;
' LANGUAGE plpgsql;



CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();

1 Ответ

2 голосов
/ 15 апреля 2019

Как описано в документации, NEW и OLD определены в триггерах уровня строки и содержат строку соответствующей таблицы после (для триггеров INSERT и UPDATE) и перед (для UPDATE и INSERT запускает) модификацию данных.

Вам не нужно передавать их в функцию триггера, они определяются автоматически.

В триггере BEFORE вы можете просто изменить NEW, чтобы изменить новую строку (вы не обновляете таблицу в триггере BEFORE).

Чтобы получить исходную строку в триггере, просто используйте значения в OLD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...