getWarnings() PLSQL/java - comment recupérer les warnings?

getWarnings() PLSQL/java - comment recupérer les warnings? - Java - Programmation

Marsh Posté le 30-12-2008 à 14:31:52    

Bonjour,
 
J'ai une fonction pl/sql qui envoi des warnings suivant certain cas.
J'aimerais lorsque je lance cette fonction sur mon programme java récupérer ces warnings.  
Par exemple, j'ai une fonction PL/SQL:
CREATE OR REPLACE FUNCTION f_essai()
  RETURNS void AS
$BODY$
DECLARE  
BEGIN    
  RAISE WARNING '04;KO0;civilite;civilite;';
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

 
et mon programme java:
 
Class.forName("org.postgresql.Driver" );
    Properties props = new Properties();
    props.setProperty("user", config.getUser());
    props.setProperty("password", config.getPassword());
    connexion = DriverManager.getConnection(config.getUrl(), props);
    connexion.setAutoCommit(false);
    String sql = "{ call  f_essai()}";
    CallableStatement call = connexion.prepareCall(sql);
    call.registerOutParameter(1, java.sql.Types.VARCHAR);
    call.execute();
    SQLWarning warning = call.getWarnings();

 
Mon getWarnings est toujours vide, comment faire ? Est ce que j'ai mal codé?
Je suis bloqué :(
 
D'avance merci
 
PS: je travaille sous postgresql, mais je ne pense pas que ça change quoi que ce soit pour récupérer en java les warnings pl/sql


Message édité par goofy35 le 30-12-2008 à 14:37:00
Reply

Marsh Posté le 30-12-2008 à 14:31:52   

Reply

Marsh Posté le 30-12-2008 à 15:18:07    

En fait, pour préciser, j'ai plusieurs messages que j'aimerais renvoyer à mon programme java, j'ai pensé à remplir une variable varchar et faire un return, mais je ne connais pas la taille exact de la variable car elle peut faire 5 caractéres ou 10000caractéres suivant les cas .
Exemple de cas dans ma fonction PL/SQL:
if resultat_demande!='OK' and resultat_demande!='NOK' then
   RAISE WARNING 'La valeur de resultat demandée pour cette demande n est pas valide. (ID=%)', t_demande.id;
   CONTINUE;
  end if;

 
Donc si quelqu'un a une soluce autres que des warnings je suis preneur.
Genre je retourne une liste, mais je sais pas si ça existe les liste en PL


Message édité par goofy35 le 30-12-2008 à 15:19:11
Reply

Marsh Posté le 30-12-2008 à 19:58:10    

une des soluces que je ferai:
 
1) ne pas coder les textes de tes warnings directement dans le code mais dans une table, meilleur pour la maintenance, et plus pratique si jamais tu devais faire du multilanguage.
je verrais plus une table warningblabla ou tu as un code warning et son explication.
 
2) je remballerai le/les codes warnings dans un varchar2 séparé par quelque chose dans une variable OUT de ta procédure stockée, et je le traiterai en java via un stringtokenizer, et aller rechoper le texte du warning ou le loader a l'init de ton appli.
 
ps: si jamais tu trouves un truc pour renvoyer une collection/array ce que tu veux je suis preneur :)

Reply

Marsh Posté le 31-12-2008 à 14:47:21    

Hey, merci, justement j'ai opté pour la solution 1, stockage dans la base.
 
Mais par contre non je n'ai rien trouvé pour un retour en collection/array, pour le moment

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed