Salut tout le monde,
j'ai écrit une procédure stockée en pl/pgsql dont le code est le suivant:
je l'ai testée au niveau de la bd et elle marche nickel
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;
j'ai aussi ecrit le code JDBC pour l'appeler
le probleme c'est quand j'exécute le code précèdent, le driver de postgres affiche l'exception suivante:
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();
l'instructionorg.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
devrait normalement transformer le paramètre newPassword en type varchar SQL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 callableStatement.setString(2, newPassword);
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
Partager