Запрос plpgsql - как я могу объединить, если, то с обновлением? - PullRequest
0 голосов
/ 06 февраля 2019

У меня следующий запрос:

create or replace function test_function()
    returns trigger as $body$
begin
    if (tg_table_name = 'mytable' and tg_op='insert') then
        INSERT into another_table(id, name) values(new.id, new.name);
        return new;
    else if (tg_table_name = 'mytable' and tg_op='update') then
        INSERT into another_table(id, name) values(new.id, new.name);
        return new;
    end if;
    return null;
end;
$body$ language plpsql;

РЕДАКТИРОВАТЬ: Мне нужно сделать:

update table mytable set name = 'test';

РЕДАКТИРОВАТЬ2: это не сработало, значение2 не был обновлен до нуля;

BEGIN   
IF (TG_OP = 'INSERT' AND TG_TABLE_NAME='tableA') THEN
    INSERT INTO tableB(
            columnA,
            columnB)
        VALUES(
            new.value1,
            new.value2);
new.value2 := null;
RETURN NEW;
ELSEIF (TG_OP = 'UPDATE' AND 
TG_TABLE_NAME='tableA') THEN
    INSERT INTO tableB(
            columnA,
            columnB)
        VALUES(
            new.value1,
            new.value2);
new.value2 := null;
RETURN NEW;
END IF;
RETURN null;
END;

РЕДАКТИРОВАТЬ: 4

create trigger add_notif_trigger after insert or update on 
 mytable for each row when (new.name > 100) execute 
 procedure function test_function();

Мне нужно обновить при любых условиях.Я не могу понять, как это сделать.

С уважением,

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

IF THEN IF new.value = true THEN END IF;

END IF;

Будьте осторожны, когда вы используете обновление (TG_OP = 'UPDATE'), у вас есть старое и новоезначение, во время вставки у вас есть только новое значение

0 голосов
/ 06 февраля 2019

Если вы хотите изменить значения столбцов базовой таблицы, вам не нужно другое обновление, вы просто присваиваете NEW.column_name

if
..

NEW.name := 'test';

else if
..

NEW.name := 'test';
...