Bonjour,

J'ai un petit problème pour éxécuter une procédure stockée avec une base Sybase et JDBC.

Voici le corps de ma procédure stockée :

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
23
24
create proc ps_part_composite_firme
(@CodFirme varchar(50) = 'F12', @IdLangue int = 2)
as
begin
	if (@IdLangue = 1) 
		begin
			SELECT COD_COMP AS CODE_COMPOSITE, LIB_COMP AS LIB_COMPOSITE,
				convert(char(8), DAT_OUV, 112) AS DATE_OUV,
				convert(char(8), DAT_CLO, 112) AS DATE_CLO
        		FROM E_COMPOSITE
        		WHERE COD_FIRM = @CodFirme
       			ORDER BY LIB_COMP
		end
	else
		begin
			SELECT COD_COMP AS CODE_COMPOSITE, LIB_REPORT AS LIB_COMPOSITE,
				convert(char(8), DAT_OUV, 112) AS DATE_OUV,
				convert(char(8), DAT_CLO, 112) AS DATE_CLO
        		FROM E_COMPOSITE
       			WHERE COD_FIRM = @CodFirme
       			ORDER BY LIB_REPORT
		end
end
go
La procédure stockée fonctionne bien et a été testée. Elle prend donc en paramètre un String (CodFirme) et un Integer (IdLang).
Maintenant je veux récupérer l'affichage qu'elle génère avec son SELECT dans ma classe java. Pour cela, j'ai créé une méthode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
try {
	    			SybStatement syb_stmt = (SybStatement)this.conn.createStatement();
	    			syb_stmt.setFetchSize(200);	
 
	    			String query = "{call ps_part_composite_firme [(?, ?)]}";
	    			SybCallableStatement call = (SybCallableStatement)this.conn.prepareCall(query);
	    			call.setString("CodFirme",CodFirme);
	    			call.setInt("IdLangue",langue);
	    			SybCursorResultSet syb_rs = (SybCursorResultSet)call.executeQuery();
}
catch (SQLException se) { System.out.println(se.getMessage); }
catch (Exception e) { System.out.println("Autre erreur"); }
J'ai l'erreur SQL suivante : There is no host variable corresponding to the one specified by the PARAM datastream. This means that this variable 'CodFirme' was not used in the preceding DECLARE CURSOR or SQL command.

Or pourtant cette variable est bien déclarée dans ma procédure stockée ! (cf. le code de la procédure).
J'ai essayé de remplacer les lignes call.setString et call.setInt du code Java par...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
call.setString(1,CodFirme);
call.setInt(2,langue);
... ça ne marche pas mieux, j'ai alors l'erreur suivante : There is no host variable corresponding to the one specified by the PARAM datastream. This means that this variable '' was not used in the preceding DECLARE CURSOR or SQL command.

Quelqu'un a une idée ? Mon code Java est-il bon ?
Merci d'avance