我在 postgres 中存储了一个带有类似变量的过程
DECLARE
totLen BYTEA;
BEGIN
totLen = E'\\x000034';
....
totLen 必须正好是 3 个字节,我必须将其他值相加,例如
totLen = totLen + 1;
我尝试 totLen = totLen + E'\x01' 但不起作用。什么是正确的解决方案?
我在 postgres 中存储了一个带有类似变量的过程
DECLARE
totLen BYTEA;
BEGIN
totLen = E'\\x000034';
....
totLen 必须正好是 3 个字节,我必须将其他值相加,例如
totLen = totLen + 1;
我尝试 totLen = totLen + E'\x01' 但不起作用。什么是正确的解决方案?
这是一个将值的偏移量offs
的三个字节视为三字节大端整数并添加到该数字的函数:bytea
b
i
CREATE OR REPLACE FUNCTION add(b bytea, offs integer, i integer) RETURNS bytea
LANGUAGE plpgsql IMMUTABLE STRICT AS
$$DECLARE
result integer := get_byte(b, offs) * 65536 +
get_byte(b, offs + 1) * 256 +
get_byte(b, offs + 2) +
i;
BEGIN
IF result > 16777215 THEN
RAISE EXCEPTION 'addition overflows';
END IF;
RETURN set_byte(
set_byte(
set_byte(
b,
offs,
result / 65536
),
offs + 1,
(result % 65536) / 256
),
offs + 2,
result % 256
);
END;$$;