0

我在 postgres 中存储了一个带有类似变量的过程

DECLARE 
    totLen  BYTEA;
BEGIN 
     totLen = E'\\x000034';
     ....

totLen 必须正好是 3 个字节,我必须将其他值相加,例如

totLen = totLen + 1;

我尝试 totLen = totLen + E'\x01' 但不起作用。什么是正确的解决方案?

4

1 回答 1

0

这是一个将值的偏移量offs的三个字节视为三字节大端整数并添加到该数字的函数:byteabi

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;$$;
于 2017-01-13T15:05:28.917 回答