J'ai du mal à ce sujet.
J'essaie de lancer un varchar code> contenant une liste de numéros dans un
int graph code>, afin de servir un opérateur code> dans code> sur un
où code> clause.
Ceci est la dernière version de mon code.
SQL Error [42883]: ERROR: operator does not exist: integer = integer[]
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
Where: PL/pgSQL function is_product_in_categories(integer,character varying) line 7 at SQL statement
3 Réponses :
Utilisez si vous contrôlez la chaîne (par exemple, vous la construisez vous-même), Vous pouvez utiliser l'un ou l'autre de ces deux: p> string_to_array () code> pour convertir une chaîne en une chaîne en une matrice (texte):
Le problème avec l'opérateur code> dans code> est-il ne pas admettre un tableau comme argument. Au lieu de cela, il attend une simple liste de scalaires. Voir la documentation postgreSQL ici https://www.postgresql.org/docs/ 9.0 / FONCTIONS-COMPARISONS.HTML # AEN16964
Pour éviter cette limitation, le = Toute combinaison code> accepte une matrice comme argument.
Le code se termine de cette façon. P>
create or replace function is_product_in_categories (
_product_id integer,
_cat_list varchar
)
returns boolean
as $$
declare
_n integer;
begin
_n = 0;
select count(*)
into _n
from of_category_products
where product_id = _product_id and category_id = any (_cat_list::int[]);
return _n > 0;
end;
$$ language plpgsql;
select is_product_in_categories(1, '{1, 2, 3}')
Réviser votre déclaration de fonction et définir comme tableau d'entiers variadiques: ou simplement comme une éventail d'entiers: p> voir
Vous pouvez réduire la fonction à une seule déclaration. P>
Merci Belayer. Ces solutions sont encore plus propres que les miennes. J'apprécie que l'approche code> existe code> dans le but de la fonction.
La syntaxe de Postgres Array est
'{1, 2, 3}' code>. Mais vous ne voulez probablement pas cela - au lieu de cela, vous devriez diviser la chaîne par un séparateur ou rendre votre fonction prendre un paramètre de tableau en premier lieu.
Thask Bergi, mais j'ai toujours une erreur de syntaxe utilisant
'{1, 2, 3}' code>. L'erreur est
Erreur SQL [42883]: Erreur: l'opérateur n'existe pas: INTEGER = INTEGER [] CODE> Ce qui signifie que le validateur interpréte le contenu de la parenthèse comme un numéro unique.
Le problème semble être que l'opérateur
dans code> n'accepte pas un tableau. Par exemple,
catégorie_id in (tableau [1,2,3]) code> soulève la même exception.