为什么在通过 Postgresql 中的函数删除记录时出现 "out of range for bigint" 错误?
Why am I getting an "out of range for bigint" error when deleting records through a function in Postgresql?
我正在编写一个 postgresql 存储过程,以根据特定条件从 table 中删除记录。如果找到匹配项,则删除记录。
这是我的存储过程:
CREATE OR REPLACE FUNCTION DeleteSomeRecords(keys_param character varying)
RETURNS void AS
$$
BEGIN
DELETE FROM public.SomeTable
WHERE keyvalue = ANY(keys_param::bigint[]);
END;
$$ LANGUAGE plpgsql;
字段键值定义为bigint。
这是我在 PgAdmin 4 中调用它的方式:
SELECT * FROM DeleteSomeRecords('{9226086781768122240,9506724121199784302}')
我收到以下错误。
ERROR: value "9226086781768122240" is out of range for type bigint
CONTEXT: SQL statement "DELETE FROM public.SomeTable
WHERE keyvalue= ANY(keys_param::bigint[])" PL/pgSQL function DeleteSomeRecords(character varying) line 3 at SQL statement
我做错了什么?
这个函数有没有更好的写法?
我正在使用 NpgSql 通过 C#/.Net 应用程序调用此函数。
我有一个列表值,我将其转换为逗号分隔的字符串:
string sKeyValues = "{" + string.Join(",", keyValue) + "}";
谢谢
将其转换为数字:
WHERE keyvalue = ANY(keys_param::numeric[])
我正在编写一个 postgresql 存储过程,以根据特定条件从 table 中删除记录。如果找到匹配项,则删除记录。
这是我的存储过程:
CREATE OR REPLACE FUNCTION DeleteSomeRecords(keys_param character varying)
RETURNS void AS
$$
BEGIN
DELETE FROM public.SomeTable
WHERE keyvalue = ANY(keys_param::bigint[]);
END;
$$ LANGUAGE plpgsql;
字段键值定义为bigint。
这是我在 PgAdmin 4 中调用它的方式:
SELECT * FROM DeleteSomeRecords('{9226086781768122240,9506724121199784302}')
我收到以下错误。
ERROR: value "9226086781768122240" is out of range for type bigint CONTEXT: SQL statement "DELETE FROM public.SomeTable WHERE keyvalue= ANY(keys_param::bigint[])" PL/pgSQL function DeleteSomeRecords(character varying) line 3 at SQL statement
我做错了什么?
这个函数有没有更好的写法?
我正在使用 NpgSql 通过 C#/.Net 应用程序调用此函数。 我有一个列表值,我将其转换为逗号分隔的字符串:
string sKeyValues = "{" + string.Join(",", keyValue) + "}";
谢谢
将其转换为数字:
WHERE keyvalue = ANY(keys_param::numeric[])