Probleme avec JDBC et procedures stockées oracle!

Probleme avec JDBC et procedures stockées oracle! - SQL/NoSQL - Programmation

Marsh Posté le 19-05-2005 à 16:16:05    

Bonjour,
 
j'ai une procedure stockée dans une base oracle 9i qui est la suivante:
 

Code :
  1. create or replace procedure myproc4(dno number, perc number)
  2. is
  3.   cursor emp_cur (dept_no number) is
  4.     select sal from emp where deptno=dept_no for update of sal;
  5.   empsal number(8);
  6. begin
  7.   open emp_cur(dno);
  8.   loop
  9.     fetch emp_cur into empsal;
  10.     exit when emp_cur%NOTFOUND;
  11.     update emp set sal=empsal*(perc/100)
  12.     where current of emp_cur;
  13.   end loop;
  14.   close emp_cur;
  15.   commit;
  16. end myproc4;


 
Dans la table emp, la column sal est un number(4,2).
 
Depuis mon code java, j'appelle cette PS de la maniére suivante:
 

Code :
  1. CallableStatement cs = con.prepareCall("{ call myproc4(?,?)}" );
  2.             cs.setString(1,deptno);
  3.             cs.setString(2,percentage);
  4.            
  5.             cs.registerOutParameter(1, Types.VARCHAR);
  6.             cs.registerOutParameter(2, Types.INTEGER);
  7.            
  8.             ResultSet res =(ResultSet) cs.executeQuery();                       
  9.            
  10.             while (res.next()){
  11.                 String s = res.getString(1)+"  "+res.getString(2);
  12.                 system.out.println(" PROC PARAMS ARE : "+s);
  13.             }
  14.             cs.close();
  15.             res.close();
  16.            
  17.         } catch (SQLException sqle){
  18.             ...;
  19.         }       
  20.     }


 
Quand j'execute mon code, je recois l'erreur suivante:
 

Code :
  1. ORA-00600: code erreur interne, arguments : [12259], [], [], [], [], [], [], []


 
J'ai googler cette erreur, mais je n'ai rien trouvé de significatif, et ce d'autant que la colonne sal n'est pas updater.
Je ne comprends pas l'erreur qui bloque et empeche cet update, d'autant que j'ai change percentage de int, a double et meme float dans mon code java, mais ces changements ont été sans effets notables!
 
Merci!


---------------
The bible was written by people who believed the earth was flat!
Reply

Marsh Posté le 19-05-2005 à 16:16:05   

Reply

Marsh Posté le 19-05-2005 à 16:18:54    

Tu as un catch, mais il est ou le try ?

Reply

Marsh Posté le 19-05-2005 à 16:23:03    

Au fait, essaie avec :
ResultSet res =(ResultSet) cs.execute();
au lieu de:
ResultSet res =(ResultSet) cs.executeQuery();  

Reply

Marsh Posté le 19-05-2005 à 16:31:18    

le try est juste avant le CallableStatement mais j'avais pas jugé utile de le mettre.
Quand a changer executeQuery() en execute(), ca n'a rien donné, d'autant que execute retourne un boolean, et non un ResultSet!
Merci


---------------
The bible was written by people who believed the earth was flat!
Reply

Marsh Posté le 19-05-2005 à 16:33:52    

Bah d'accord mais ta procédure, elle renvoie pas un resultset.

Reply

Marsh Posté le 19-05-2005 à 16:37:55    

Non effectivement, ma procedure ne fait qu'un update au niveau de la base de donnée, je ne retourne rien.
Mais toujours est-il que cs.execute() n'est pas 'true'.
Le ResultSet est juste la pour faire joli! -_-


---------------
The bible was written by people who believed the earth was flat!
Reply

Sujets relatifs:

Leave a Replay

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