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 02/05/2007, 18h06   #1
Membre habitué
 
Avatar de Davboc
 
Inscription : novembre 2005
Messages : 266
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2005
Messages : 266
Points : 139
Points : 139
Par défaut No function matches the given name and argument types.

Bonjour

J'utilise PGAdmin 3 et j'essaie d'adapter une fonction PL/SQL vers PL/pgSQL.

Voilà la fonction telle qu'elle est :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE OR REPLACE FUNCTION fn_nbmots(pi_s_titre IN varchar) RETURNS numeric AS 
$body$
 
DECLARE
  result numeric;
  l_s_titre  varchar(100);
  l_n_nbespace numeric;
  l_n_posespace numeric;
 
BEGIN
  l_n_posespace := 0;
  l_n_nbespace := 0;
  l_s_titre := ltrim( rtrim( pi_s_titre));
 
  l_n_posespace := instr( l_s_titre, ' ');
  WHILE l_n_posespace <> 0 loop
      l_n_nbespace := l_n_nbespace +1;      
      l_s_titre := substr( l_s_titre, l_n_posespace + 1, 200);
      l_n_posespace := instr( l_s_titre, ' ');
      exit when l_n_posespace = 0;
  END loop;
 
  result := l_n_nbespace +1;
  RETURN(result);
END;
$body$
LANGUAGE plpgsql;
Mon problème, pour l'instant, c'est que j'ai un message d'erreur qui dit :
Citation:
État SQL :42883
Astuce : No function matches the given name and argument types. You may need to add explicit type casts.
Contexte : PL/pgSQL function "fn_nbmots" line 13 at assignment
Lorsque je tente de l'appeler.

Voilà le code d'appel que j'utilise :
Code :
SELECT * FROM fn_nbmots('la vie est belle');
Le but de cette fonction est de compter le nombre de mots d'une chaîne.

Merci de votre aide
Davboc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 23h01   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
Bonsoir,

en fait tu n'as pas le bon nombre d'argument sur instr.

Par contre je te propose cette fonction faite a l'instant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE OR REPLACE FUNCTION fn_nbmots(st varchar) RETURNS integer AS 
$body$
DECLARE
  i integer;  
  chaine varchar;
  desti varchar;
  current char(1);
  last char(1);
BEGIN
 -- on gere la ponctuation en remplacant les char par un espace
 chaine:=trim(translate(st,',;.:!?','      '));
 -- on enleve les doubles espaces eventuels
 WHILE position('  ' IN chaine)!=0 LOOP
  chaine:=REPLACE(chaine,'  ',' ');
 END LOOP;
 -- on compte le nombre de mots
 RETURN array_upper(string_to_array(chaine,' '),1);
END;
$body$
LANGUAGE plpgsql;
exemple :

select fn_nbmots('Voici un essai, ca gere la ponctuation ? oui !');

retourne : 8
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 11h25   #3
Membre habitué
 
Avatar de Davboc
 
Inscription : novembre 2005
Messages : 266
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2005
Messages : 266
Points : 139
Points : 139
Merci ta fonction fonctionne parfaitement !

Mais le message d'erreur que j'ai eu etait directement lié à la mauvaise utilisation de la fonction instr ?

Si c'est le cas il n'est pas très équivoque....
Davboc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h34.


 
 
 
 
Partenaires

Hébergement Web