Bonsoir,
Je me casse la tête sur un bout de code depuis le lundi. Maintenant j'appel à l'aide. Je n'arrive pas à exécuter une procédure stockée de postgres depuis hibernate.
Voici mon code java:
Code:
StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("p_count_contrat");
storedProcedure.registerStoredProcedureParameter(1,Integer.class, ParameterMode.IN);
storedProcedure.setParameter(1, 37);
storedProcedure.executeUpdate();
Voici le code de ma procédure stockée:
Code:
CREATE OR REPLACE FUNCTION "public"."p_count_contrat"(vidbanque INTEGER)
RETURNS INTEGER AS
$$
DECLARE
rowsAffected integer := 0;
BEGIN
BEGIN
UPDATE banque SET libbanque='ORA ORA ORABANK' WHERE idbanque=vidbanque;
RETURN null;
END;
GET DIAGNOSTICS rowsAffected = ROW_COUNT; --here you get the affected rows
return rowsAffected;
END;
$$
LANGUAGE 'plpgsql' VOLATILE COST 100
SECURITY DEFINER;
ALTER FUNCTION "public"."p_count_contrat"(vidbanque INTEGER) OWNER TO "postgres";
et voici la requête exécutée sur postgres par hibernate récupérée du log:
Code:
{call p_count_contrat(?)}
et voici enfin le résultat que j'ai:
Code:
Building Return [isResultSet=true, updateCount=-1, extendedReturn=false
En plus j'ai remarqué que aucune requête d'écriture ne marche à partir de hibernate en nativequery(Appel de procédure stockée ou exécution directe de requête). Par contre, j'ai toujours le nombre de ligne impacté par requête en résultat, sans que l'impact n'ait eu lieu dans la base.
Je comprends plus rien.
Merci de m'aider.