首页 > 解决方案 > 如何循环遍历 pg/PLSQL 中的列列表?

问题描述

我有一个表,其中包含大约 3 打 VARCHAR 列,在将记录插入数据库之前都需要进行相同的清理(将空字符串转换为 NULL)。有多个应用程序访问数据库,所以我想在触发器中执行此操作。我可以编写代码来检查和设置每一列,但我想循环遍历这些列。我编写的函数不会产生错误,但它也不会将空列设置为 NULL。

CREATE OR REPLACE FUNCTION public.validate_flds() RETURNS trigger AS
$BODY$
DECLARE
  coldata VARCHAR;
  collist VARCHAR[];
BEGIN
  collist := ARRAY[NEW.fld01,NEW.fld02,NEW.fld03];
  FOREACH coldata IN ARRAY collist LOOP
    IF coldata = '' THEN coldata := NULL; END IF;
  END LOOP;
  RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;

我错过了什么?

标签: postgresqlplpgsql

解决方案


IF coldata = '' THEN coldata := NULL; END IF;

NEW在记录保持不变的情况下更改变量的值。没有简单的方法可以在循环中执行您想要的操作。我建议使用NULLIF().

begin
    new.fld01:= nullif(new.fld01, '');
    new.fld02:= nullif(new.fld02, '');
    new.fld03:= nullif(new.fld03, '');
    return new;
end;

推荐阅读