Maison > base de données > tutoriel mysql > Erreur d'invocation de fonction PostgreSQL : comment corriger « la fonction… n'existe pas » en raison d'une incompatibilité de type ?

Erreur d'invocation de fonction PostgreSQL : comment corriger « la fonction… n'existe pas » en raison d'une incompatibilité de type ?

DDD
Libérer: 2025-01-04 07:19:34
original
465 Les gens l'ont consulté

PostgreSQL Function Invocation Error: How to Fix

ERREUR : incompatibilité d'invocation de fonction et conversion de type d'argument

Dans votre code, vous rencontrez l'erreur : "ERREUR : la fonction... fait n'existe pas et CONSEIL : Aucune fonction ne correspond au nom et aux types d'argument donnés." Cette erreur résulte d'une inadéquation entre la définition de la fonction et les arguments passés lors de l'appel.

Plus précisément, votre fonction, FnUpdateSalegtab09, a plusieurs paramètres déclarés comme type de données « smallint ». Cependant, lorsque vous appelez la fonction, vous transmettez des littéraux numériques (par exemple, « 12 ») comme arguments pour ces paramètres.

Problème de conversion de type

PostgreSQL suppose que les littéraux numériques sans points décimaux ni exposants comme type « entier » par défaut. Cependant, les paramètres de votre fonction sont définis comme « smallint », qui est une plage de -32 768 à 32 767. La transmission d'une valeur entière sans transtypage explicite au-delà de cette plage peut entraîner une troncature des données ou des erreurs.

Solution

Pour résoudre ce problème, vous disposez de deux options :

1. Conversion de type explicite dans l'invocation de fonction :

Vous pouvez explicitement convertir les littéraux numériques en « smallint » dans l'invocation de fonction en utilisant la syntaxe « :: smallint ». Par exemple :

select FnUpdateSalegtab09 (4, 1, 0, 12, 1::smallint, '9'::varchar,....
Copier après la connexion

2. Passer des littéraux non typés :

Vous pouvez également utiliser des littéraux de chaîne non typés dans l'appel de fonction. PostgreSQL déduira alors le type de données correct en fonction des paramètres de la fonction. Pour ce faire, placez le littéral numérique entre guillemets simples :

select FnUpdateSalegtab09 (4, 1, 0, 12, '1':: smallint,....
Copier après la connexion

Exemple

Considérez l'invocation de fonction corrigée suivante :

select FnUpdateSalegtab09 (4, 1, 0, 12::smallint, 1, '9'::varchar,....
Copier après la connexion

Cet appel convertit explicitement le littéral entier « 12 » en « smallint », garantissant que les paramètres de la fonction correspondent à ceux attendus. types de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal