Триггер, чтобы изменить номер телефона - PullRequest
0 голосов
/ 15 декабря 2018

Мне нужен триггер, это моя база данных, которая заменяет первый ноль телефонного номера на соответствующий код страны (в моем случае это +31).Пока мой код:

create or replace function correct_number()
    returns trigger as $$
declare 
    Pnumber integer;
begin
    select substring(phone, 1, 1) from "user" where phone = new.phone into Pnumber;
    if Pnumber = 0 then 
            update "user"
            set phone = overlay("user".phone placing '+31' from 1 for 1)
            where id = new.id;
        return null;
    end if;
end
$$ language plpgsql;

create trigger force_countrynr
before insert on "user"
for each statement execute procedure correct_number();

Проблема в том, что каждый раз, когда я пытаюсь добавить данные, моя СУБД выдает ошибку, что конец процедуры достигается без возврата.Очевидно, это означает, что он не считает оператор if истинным, но я не могу понять, почему.

Это DDL атрибута, который касается моей функции, это varchar (13) имой тестовый запрос выглядит следующим образом:

insert into gebruiker
values('U5', 'Hans', '12345', 'Hans', null, 'Kraay', 'Hansworst', '0000QW', 'beukenweg', '4', null, '0612345678', 'test@notnow.nl', '2015-12-12');

Я пытался изменить нулевой тип данных в моем операторе if, изменить тип данных числовой переменной и многое другое, но я не могузаставить его работать.

1 Ответ

0 голосов
/ 15 декабря 2018

Вы хотите исправить число в каждой вставленной строке, поэтому триггер должен быть for each row.

Нет причин запрашивать таблицу в триггере, так как текущая вставленная строка доступна вnew переменная.

Нет необходимости обновлять таблицу, просто измените запись new и верните ее.

create or replace function correct_number()
    returns trigger as $$
begin
    if left(new.phone, 1) = '0' then
        new.phone:= '+31' || right(new.phone, -1);
    end if;
    return new;
end
$$ language plpgsql;

create trigger force_countrynr
before insert on "user"
for each row execute procedure correct_number();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...