Maison > base de données > tutoriel mysql > Pourquoi mon appel de fonction SQL échoue-t-il avec l'erreur « la fonction n'existe pas » ?

Pourquoi mon appel de fonction SQL échoue-t-il avec l'erreur « la fonction n'existe pas » ?

Mary-Kate Olsen
Libérer: 2024-12-27 09:33:11
original
266 Les gens l'ont consulté

Why Does My SQL Function Call Fail with

ERREUR : la fonction n'existe pas et aucune fonction correspondante trouvée

Considérez le message d'erreur suivant :

ERROR:  function fnupdatesalegtab09(integer, integer, integer, integer, integer, unknown, unknown, integer, unknown, integer, unknown, integer, integer, integer, numeric, integer, integer, unknown, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, unknown, integer, boolean, unknown, unknown, unknown, unknown, boolean, unknown, unknown, integer, unknown, integer, integer, integer, integer, integer) does not exist  
LINE 1: select FnUpdateSalegtab09 (4, 1, 0, 12, 1, '9','2014-07-15',...
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.  
Copier après la connexion

Dans ce scénario, une tentative a été conçu pour appeler une fonction nommée FnUpdateSalegtab09 avec des paramètres spécifiques. Cependant, l'erreur indique que la fonction n'existe pas. De plus, l'erreur suggère qu'aucune fonction ne correspond au nom et aux types d'arguments spécifiés.

Cause première

L'erreur est probablement due à un problème de diffusion. Dans l'appel de fonction, des littéraux numériques sont utilisés pour les paramètres définis comme smallint dans la définition de la fonction. Les littéraux numériques sont initialement présumés être de type entier si leur valeur correspond à un type entier. Puisqu'aucune conversion de type explicite n'est fournie, cela peut entraîner une inadéquation entre les types d'arguments attendus et réels.

Solution

Pour résoudre ce problème, ajoutez des conversions de type explicites aux littéraux numériques dans l'appel de fonction pour correspondre au type de données smallint attendu. Alternativement, vous pouvez utiliser des littéraux entre guillemets (non typés) dans l'appel de fonction.

Exemple

Appel incorrect :

SELECT * FROM f_typetest(1);
Copier après la connexion

Correct Appels :

SELECT * FROM f_typetest('1');
SELECT * FROM f_typetest(smallint '1');
SELECT * FROM f_typetest(1::int2);
SELECT * FROM f_typetest('1'::int2);
Copier après la connexion

En effectuant ces ajustements, l'appel de fonction devrait maintenant être reconnu et exécuté sans l'erreur.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal