Probleme d'appel de procedure stockee postgres via JDBC
Salut tout le monde,
j'ai écrit une procédure stockée en pl/pgsql dont le code est le suivant:
Code:
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:
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:
Citation:
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:
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