Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2705 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Procedure Stockée en Java sous Oracle 9.2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Procedure Stockée en Java sous Oracle 9.2

n°1149371
petirelou
take the blue trane
Posté le 13-07-2005 à 17:52:56  profilanswer
 

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
 
 
 
 
 
 
 

mood
Publicité
Posté le 13-07-2005 à 17:52:56  profilanswer
 

n°1149381
petirelou
take the blue trane
Posté le 13-07-2005 à 18:03:09  profilanswer
 

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 !

n°1149385
petirelou
take the blue trane
Posté le 13-07-2005 à 18:09:26  profilanswer
 

euh...
au fait je précise :
 
ma procédure stockée compile et la fonction aussi.

n°1150803
petirelou
take the blue trane
Posté le 15-07-2005 à 17:51:12  profilanswer
 

une petite correction :  
la requete SQL de ma classe JAVA était fausse :

Code :
  1. WHERE"
  2.            + "    ("
  3.            + "      ( BASE1.CODEPOSTAUX.CP_CP like '%' CONCAT  ?  CONCAT '%' )"
  4.            + "    )";


en fait  
il faut remplacer  

Code :
  1. ( BASE1.CODEPOSTAUX.CP_CP like '%' CONCAT  ?  CONCAT '%' )" par :


Code :
  1. ( BASE1.CODEPOSTAUX.CP_CP like '%' || ? || '%' )"


 
 
ceci dit, j'ai toujours une erreur mais ce n'est plus la même :

Code :
  1. ORA-00932: inconsistent datatypes: expected OUT Conversion failed


 
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 :
  1. CREATE OR REPLACE PACKAGE types
  2. AS
  3.     TYPE ref_cursor IS REF CURSOR;
  4. END;


 
 
Merci de votre aide !
 
petirelou
 

n°1152859
petirelou
take the blue trane
Posté le 18-07-2005 à 18:48:40  profilanswer
 

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 :
  1. / Obtain the default connection
  2.   Connection conn = new OracleDriver().defaultConnection();
  3.   // Create any subsequent statements as a REF CURSOR
  4.   ((OracleConnection)conn).setCreateStatementAsRefCursor(true);


 
 
mais malgré cela j'ai toujours un problème entre ResultSet et Cursor :

Code :
  1. ORA-00932: inconsistent datatypes: expected OUT Conversion failed


 
 :pt1cable:
bon si quelqu'un a une solution...
 
:bounce:  :bounce: :bounce:  :bounce: :bounce:  :bounce:

n°1154233
titides
┼ DΣA┼H ┼
Posté le 20-07-2005 à 02:39:03  profilanswer
 

Essaye de voir sur ce forum. Oracle sur developpez.com


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Procedure Stockée en Java sous Oracle 9.2

 

Sujets relatifs
[JAVA] Compatibilité JVM SUN/Microsoft[JAVA] Comment recuperer un element dans un JScrollPane
un bon livre java[JAVA] Rappeler une class
Importation donné sous Oracle[Java] [Résolu] Pb d'affichage: fenêtres (frames) vides!
[Hibernate] Pb mapping OracleQuestions sur Oracle 8i
services Oracle[Java] Placer les composants à la verticale (layout)
Plus de sujets relatifs à : Procedure Stockée en Java sous Oracle 9.2


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR