Je travaille sur l'écriture d'une procédure stockée postgresql pour supprimer des enregistrements d'une table en fonction d'un certain critère. Si je trouve une correspondance, alors je supprime l'enregistrement.Pourquoi une erreur "hors plage pour bigint" est-elle générée lors de la suppression d'enregistrements via une fonction dans Postgresql?
Voici ma procédure stockée:
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;
Le keyvalue de champ est défini comme bigint.
Voici comment je l'appelle de PgAdmin 4:
SELECT * FROM DeleteSomeRecords('{9226086781768122240,9506724121199784302}')
Je reçois l'erreur suivante.
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
Qu'est-ce que je fais mal ici?
Existe-t-il un meilleur moyen d'écrire cette fonction? J'appelle cette fonction via une application C#/.Net en utilisant NpgSql. J'ai une des valeurs de la liste que je convertir en une chaîne séparée par des virgules:
string sKeyValues = "{" + string.Join(",", keyValue) + "}";
Merci
'9226086781768122240' est plus grande que la plus grande valeur possible d'un 'bigint' (qui est' 9223372036854775807'). Quel est le type de 'keyvalue' dans la table' SomeTable'? – Marth
Il est défini comme un bigint. – JohnB
Ensuite, il n'est pas possible d'avoir '9226086781768122240' dedans. Soit gérer les valeurs hors limites avant de les transtyper en 'bigint', soit les convertir en' numeric' comme suggéré par @ClodoaldoNeto. – Marth