首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数中参数不可用的PostgreSQL

函数中参数不可用的PostgreSQL
EN

Stack Overflow用户
提问于 2019-03-26 19:42:45
回答 1查看 49关注 0票数 0

我使用PostgreSQL构建了这个函数:

代码语言:javascript
运行
复制
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_petugasnip_petugas,这是一个临时值。有时插入,但有时不插入。它会产生如下错误:

代码语言:javascript
运行
复制
ERROR:  record "new" has no field "nama_petugas"

如果没有为nama_petugasnip_petugas插入的值/变量,如何将其保留为空白?

这是我的触发功能;

代码语言:javascript
运行
复制
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"();
EN

Stack Overflow用户

回答已采纳

发布于 2019-03-27 07:30:36

变量NEW.nama_petugas存在的当且仅当定义触发器的表具有该名称的列。

如果某些表没有同名的列,则不能将此触发器与不同的表一起使用。

要么编写几个触发器函数,要么像在this answer中那样使用动态SQL。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55365119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档