我们如何才能找到更新列值的差异,例如,如果我们有一个名为path的列,并且它具有值' / home / rafiq / Desktop',现在如果路径更新为&#39 ; / home / user / Desktop',我只需要获得用户'作为差异值。如果有任何函数或任何逻辑可以获得OLD和NEW值中的差异字符串,请提供帮助。
更新前的路径列
path
/home/user/Desktop
更新后的路径列
path
/home/admin/vm/Desktop
这里我需要得到' admin / vm'要使用触发器更新行中的其他列值,我们将不胜感激。
可以改变什么:
答案 0 :(得分:0)
尝试这样:希望它有用
CREATE OR REPLACE FUNCTION fn_trg_t()
RETURNS trigger AS
$BODY$
declare
res varchar[];
num int;
ol record;
ne record;
i int=0;
xstr text;
begin
for xold in select unnest(string_to_array(new.path,'/')) as gg Loop
num=0;
if xold.gg is not null then
for xnew in select unnest(string_to_array(old.path,'/')) as rr loop
if num=0 and xold.gg=xnew.rr then num=1; end if;
end loop;
if num=0 then
res[i]=ol.gg;
i=i+1;
end if;
end if;
end loop;
select array_to_string(res,'/') into xstr;
raise notice ' %', xstr;
return xstr;
end;
$BODY$
LANGUAGE plpgsql VOLATILE