Procedure Stockée en Java sous Oracle 9.2 - SQL/NoSQL - Programmation
Marsh Posté le 13-07-2005 à 18:03:09
oups fausse manip !
voici donc la focntion PL/SQL pour l'appeler :
CREATE OR REPLACE FUNCTION "BASE1"."FONCTION_TEST_JDBC_2"
(cp_code in VARCHAR2) return types.ref_cursor
as LANGUAGE JAVA
NAME 'GET_CP_JDBC_2.get_cp_jdbc_2(java.lang.String) return java.sql.ResultSet';
lorsque j'appelle cette fonction dans sql+ ou à travers mon application,
(select FONCTION_TEST_JDBC_2('92100') from dual)
j'ai le message suivant :
ORA-29532: Java call terminated by uncaught Java exception: oracle.jdbc.driver.OracleSQLException: ORA-00907: missing right parenthesis
Si l'un d'entre vous a une piste... parce que là je sèche !
merci d'avance !
Marsh Posté le 13-07-2005 à 18:09:26
euh...
au fait je précise :
ma procédure stockée compile et la fonction aussi.
Marsh Posté le 15-07-2005 à 17:51:12
une petite correction :
la requete SQL de ma classe JAVA était fausse :
Code :
|
en fait
il faut remplacer
Code :
|
Code :
|
ceci dit, j'ai toujours une erreur mais ce n'est plus la même :
Code :
|
je suppose que c'est un problème de correspondance entre le ResultSet renvoyé par ma classe JAVA et le CURSOR de la fonction PL/SQL.
à titre indicatif, j'ai déclaré mon curseur ainsi :
Code :
|
Merci de votre aide !
petirelou
Marsh Posté le 18-07-2005 à 18:48:40
UP ! HELP !
bon j'ai essayé d'appliquer ce que j'ai trouvé ici :
http://www.oracle.com/technology/s [...] index.html
en créant mes connexions comme ça :
Code :
|
mais malgré cela j'ai toujours un problème entre ResultSet et Cursor :
Code :
|
bon si quelqu'un a une solution...
Marsh Posté le 13-07-2005 à 17:52:56
Bonjour,
Je rencontre des difficultés à utilisé les procédures stockées java avec Oracle 9.2.
pour la classe Java j'ai utilisé l'assistant de création de la Console Oracle Enterprise Manager
pour ce qui est de l'appeler (PL/SQL wrapper)
j'ai vu 2 techniques :
- une avec une fonction :
tel que c'est indiqué ici : http://www.oracle-base.com/article [...] php#TestIt
(j'ai testé leur exemple et ça marche...)
- une autre en créant un package et un corps de package où l'on fait correspondre une procédure PL/SQL à la méthode JAVA... mais je ne la détaillerai pas ici allons droit au but :
le but de la procédure est de renvoyer des codes postaux en fonction de ce que le visiteur a déjà commencé à taper :
voici la classe JAVA : (les champs de la table CODEPOSTAUX sont CP_CP et CP_VILLE respectivement le code postal et le nom de la ville )
[cpp][/cpp]
import java.sql.*; // Classes JDBC
public class GET_CP_JDBC_2
{
public static ResultSet get_cp_jdbc_2 ( String code) throws SQLException, Exception{
Connection con = DriverManager.getConnection("jdbc:default:connection" );
PreparedStatement stmt = null;
String sql;
sql = "SELECT"
+ " BASE1.CODEPOSTAUX.CP_CP AS CP_CP,"
+ " BASE1.CODEPOSTAUX.CP_VILLE AS CP_VILLE"
+ " FROM"
+ " BASE1.CODEPOSTAUX"
+ " WHERE"
+ " ("
+ " ( BASE1.CODEPOSTAUX.CP_CP like '%' CONCAT ? CONCAT '%' )"
+ " )";
stmt = con.prepareStatement( sql );
stmt.setString( 1, code );
ResultSet rs = st-mt.executeQuery();
if (con != null) con.close();
return rs;
}
}
[cpp][/cpp]
voici l