PostgreSQL с недоступным параметром в функции - PullRequest
0 голосов
/ 26 марта 2019

У меня есть эта функция, построенная с использованием PostgreSQL:

CREATE OR REPLACE FUNCTION "db"."t_pencabutan_likuidasi_after_update"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
BEGIN
    IF(NEW.status <> OLD.status) THEN
        INSERT INTO 
             t_pencabutan_likuidasi_log(id_pencabutan, id_profile, nama_petugas, nip_petugas, status, catatan)
        VALUES(
             NEW.id_pencabutan, NEW.id_profile, NEW.nama_petugas, NEW.nip_petugas, NEW.status, NEW.catatan);
    END IF;
        RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100

Выше приведена функция, которая будет запускаться ДО ОБНОВЛЕНИЯ таблицы liquidator.

Проблема в том, что некоторые из заполнителей в INSERT не были вставлены в обязательном порядке, например nama_petugas и nip_petugas, что является временным значением. Иногда это вставлено, но иногда это не так. Выдает ошибку вроде этого:

ERROR:  record "new" has no field "nama_petugas"

Как я могу оставить это поле пустым, если нет значений / переменных, которые вставляются для nama_petugas и nip_petugas?

Вот моя триггерная функция;

CREATE TRIGGER 
"t_pencabutan_likuidasi_after_update" 
AFTER UPDATE OF "status" 
ON "db"."liquidator"
FOR EACH ROW
EXECUTE PROCEDURE 
"db"."t_pencabutan_likuidasi_after_update"();

1 Ответ

1 голос
/ 27 марта 2019

Переменная NEW.nama_petugas существует тогда и только тогда, когда таблица, для которой определен триггер, имеет столбец с таким именем.

Вы не можете использовать этот триггер с разными таблицами, если в некоторых из них нет столбца с таким именем.

Либо напишите несколько триггерных функций, либо используйте трюк, как в этот ответ , чтобы использовать динамический SQL.

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