我正在尝试编写一个聚合函数来执行 bit_and beetween 存储为 bytea 的表的列。该函数用于使用二进制字符串 % 8 (字节长度)的长度对 bytea 进行子串化,并返回满足以下要求的字节的所有部分之间的位和区间:
部分 & binary_string = binary_string
我定义了聚合“testaggregate”来聚合查询中的所有值,比如
select testaggregate (bytea_field, binary_string_in_varchar)
from tab1
这是汇总代码
create aggregate testaggregate (bytea, character varying) (
sfunc =aggand($0, $1, $2),
stype = bit varying<p>
);
其中 aggand 是:
declare
ret bit varying;
begin
if suband($2,$3) is not null then
if $1 is null then ret = suband($2,$3);
else
ret =$1 & suband($2,$3);
end if;
else
ret =null;
end if;
return ret ;
end;
而“suband”是计算每一行的 bit_and 的函数。
我的第一个问题是当我执行聚合函数时,它不会返回单行,而是返回与表一样多的行。第二个问题也是最重要的一个问题是为什么aggand执行后聚合内部状态总是为null。
对不起我的英语和代码缩进不好这是我的第一个问题。谢谢大家