我正在編寫一個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