我正在编写一个postgresql存储过程,以基于特定条件从表中删除记录。如果我找到一个匹配,那么我删除该记录。当通过Postgresql中的函数删除记录时,为什么会出现“超出范围的bigint”错误?
这里是我的存储过程:
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) + "}";
感谢
'9226086781768122240'比的最大可能值更大'bigint'(这是'9223372036854775807')。 “SomeTable”表中的'keyvalue'类型是什么? – Marth
它被定义为bigint。 – JohnB
然后它不可能有'9226086781768122240'。在投射到'bigint'之前处理超出范围的值,或者按@ClodoaldoNeto建议的投射到'numeric'。 – Marth