通过Postgresql中的函数删除记录时,为什么会出现“超出bigint范围”的错误?

时间:2017-09-22 18:00:47

标签: c# .net postgresql npgsql

我正在编写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;

字段键值定义为bigint。

以下是我如何从PgAdmin 4中调用它:

SELECT * FROM DeleteSomeRecords('{9226086781768122240,9506724121199784302}')

我收到以下错误。

  

错误:值“9226086781768122240”超出bigint类型的范围   语境:SQL语句“DELETE FROM public.SomeTable       WHERE keyvalue = ANY(keys_param :: bigint [])“SQL语句中的PL / pgSQL函数DeleteSomeRecords(字符变化)第3行

我在这里做错了什么?

有没有更好的方法来编写这个函数?

我正在使用NpgSql通过C#/ .Net应用程序调用此函数。 我有一个List值,我将其转换为逗号分隔的字符串:

string sKeyValues = "{" + string.Join(",", keyValue) + "}";

由于

1 个答案:

答案 0 :(得分:2)

将其转换为数字:

WHERE keyvalue = ANY(keys_param::numeric[])