Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/06/2007, 10h16   #1
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
Par défaut Création d'une procédure sur un texte

Bonjour

Je me heurte à un petit problème pour une de mes procédures stockée.
Voici ma procédure :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE FUNCTION check_string_length("string" text, "length" smallint) returns BOOLEAN AS LANGUAGE plpgsql;
declare
compte smallint;
begin
compte:=char_length(string);
IF (compte > length)
then
RETURN false;
else
RETURN true;
end IF;
end;
Mon problème réside en l'appel de ma fonction, si je fais :
Code :
1
2
3
4
 
senegene=> SELECT * FROM check_string_length('bioxpr', 8);
ERREUR:  la fonction check_string_length("unknown", integer) n'existe pas
ASTUCE : Aucune fonction ne correspond au nom donné et aux types d'arguments. Vous devez ajouter des conversions explicites de type.explicit type casts.
Wow !
Quelle est mon erreur ?
Merci d'avance de votre aide.

@++
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 10h35   #2
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Je l'ai testé, remplace "smallint" par "integer". Ca fonctionne !!!
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 10h41   #3
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

ta fonction ne renvoyant pas de jeu d'enregistrement (avec un SET OF), il s'agit plus d'une fonction proprement dite que d'une procédure stockée. Elle devrait donc apparaître plus du côté du SELECT que de celui de la clause FROM (mais cela fonctionne tout de même). Enfin, PostgreSQL 8 est plus regardant que les versions précédentes en ce qui concerne le contrôle du type des arguments de fonctions, il est souvent nécessaire de "caster" ces arguments :
Code :
SELECT check_string_length('bioxpr'::text, 8::smallint) AS result
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 10h42   #4
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
Ok, j'ai fait la modif', ça fonctionne en effet.
Je met le tag en résolu et je te remercie budtucker.
Toutefois, j'aimerais bien savoir pourquoi avec un smallint ça ne fonctionne pas alors qu'avec un integer, cela tourne très bien

@++
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 10h44   #5
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Citation:
Envoyé par GLDavid
Toutefois, j'aimerais bien savoir pourquoi avec un smallint ça ne fonctionne pas alors qu'avec un integer, cela tourne très bien
Parce qu'il doit faire un cast automatique de la valeur litérale 8 en integer, ce qui fait qu'il ne peut pas faire de correspondance avec la fonction qui prend un smallint en paramètre.
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/06/2007, 10h48   #6
Membre Expert
 
Avatar de GLDavid
 
Inscription : janvier 2003
Messages : 2 620
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2003
Messages : 2 620
Points : 2 474
Points : 2 474
Ok GrandFather, mes recherches sur la doc PostgreSQL m'ont conduit à la même conclusion.
Merci à tous !
Happy hacking

@++
__________________
GLDavid
Consultez la FAQ Perl ainsi que mes cours de Perl.
N'oubliez pas les balises code ni le tag

Je ne répond à aucune question technique par MP.
GLDavid est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h36.


 
 
 
 
Partenaires

Hébergement Web