我需要一个PL/pgSQL函数,它接受IP地址作为文本,并向其添加给定的整数值,根据需要携带八位字节.
我已经有了一个用JavaScript编写的工作版本:
export const incrementIpAddress = (ipAddress: string, amount: number) => {
const octets = ipAddress.split('.');
const numbers = octets.map(octet => parseInt(octet));
let carry = amount;
for(let i = numbers.length - 1; i >= 0 && carry > 0; i--) {
const sum = numbers[i] + carry;
numbers[i] = sum % 256;
carry = Math.floor(sum / 256);
}
return numbers.join('.');
}
我try 让ChatGPT将其转换为PL/pgSQL(我知道,对不起),结果是这样的:
CREATE OR REPLACE FUNCTION increment_ip_address(ip_address text, amount integer) RETURNS text AS $$
DECLARE
octets text[];
numbers integer[];
carry integer;
i integer;
BEGIN
octets := string_to_array(ip_address, '.');
FOREACH i IN ARRAY octets LOOP
numbers := numbers || i::integer;
END LOOP;
carry := amount;
FOR i IN REVERSE 1 .. array_upper(numbers, 1) LOOP
numbers[i] := numbers[i] + carry;
carry := FLOOR(numbers[i] / 256);
numbers[i] := numbers[i] % 256;
END LOOP;
RETURN array_to_string(numbers, '.')::text;
END;
$$ LANGUAGE plpgsql;
然而,这并不起作用,并且始终输出与给定的相同的IP,而不是递增的.我可以得到一些帮助来使这个函数工作吗?