我正在写一个postgresql存储过程,根据特定的条件从表中删除记录。如果找到匹配项,则删除记录。
以下是我的存储过程:
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;
字段keyvalue被定义为bigint。
以下是我从PgAdmin 4调用它的方式:
SELECT * FROM DeleteSomeRecords('{9226086781768122240,9506724121199784302}')
我得到以下错误。
错误:值“9226086781768122240”超出bigint类型的范围
CONTEXT:SQL语句“DELETE FROM public.SomeTable
其中keyvalue=ANY(keys_param::bigint[])“PL/pgSQL函数DeleteSomeRecords(字符变化)SQL语句的第3行
我在这里做错什么了?
有没有更好的方法来编写这个函数?
我使用NpgSql通过C#/.Net应用程序调用此函数。
我有一个将其转换为逗号分隔字符串的列表值:
string sKeyValues = "{" + string.Join(",", keyValue) + "}";
谢谢
最佳答案
将其转换为数字:
WHERE keyvalue = ANY(keys_param::numeric[])