Salut tout le monde,
j'ai écrit une procédure stockée en pl/pgsql dont le code est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
CREATE OR REPLACE FUNCTION "public"."modifyPassword" ("newPassword" varchar) 
RETURNS boolean AS
$body$
DECLARE
 userName VARCHAR;
BEGIN
 
select into userName user_name FROM user_roles WHERE role_name='un_role' ;
DELETE FROM user_roles WHERE user_name=userName;
UPDATE users SET user_pass=$1 WHERE user_name=userName;
INSERT INTO user_roles (user_name, role_name) VALUES (userName, 'un_role');
 
RETURN TRUE;
 
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
je l'ai testée au niveau de la bd et elle marche nickel

j'ai aussi ecrit le code JDBC pour l'appeler
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
callableStatement = connection.prepareCall("{?= call modifyPassword (?) }");
callableStatement.registerOutParameter(1, Types.BOOLEAN);
callableStatement.setString(2, newPassword);
callableStatement.execute();
le probleme c'est quand j'exécute le code précèdent, le driver de postgres affiche l'exception suivante:
org.postgresql.util.PSQLException: ERREUR: la fonction modifypassword(character varying) n'existe pas
Indice*: Aucune fonction ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
Position*: 15
l'instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
callableStatement.setString(2, newPassword);
devrait normalement transformer le paramètre newPassword en type varchar SQL
je ne sais pas comment faire?des idées??

PS: j'utilise postgresql v 8.4 et le driver postgresql-8.4-701.jdbc3.jar