IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Créer une stored procedure Java a partir de Java


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Points : 38
    Points
    38
    Par défaut Créer une stored procedure Java a partir de Java
    Bonjours,

    J'essaie de créer une stored procedure java qui soit à meme de lancer un TKprof sur le serveur à partir de mon client. Le code suivant fonctionne si je lance la creation et l'execution de la stored procedure dans SQLPLUS mais je ne peux pas le lancer a partir de mon client Java :

    "java.sql.SQLException: non supported SQL92 token at position : 87"

    Le code fonctionne jusqu'a ORACLE_HOME qui est effectivement retourné mais le sqlCmd suivant censé tourner un tkprof provoque l'erreur : pas moyen de lui faire creer la fonction java dont je sais que ce même code fonctionne en sqlplus:


    (arg est en fait le ficher source trace and /tmp/ff2.prf le fichier en output que j'irais chercher avec dbms_lob.read.)




    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
       private void do_tkprof(){
           // full path and name du trace file dont le sid est donné.
           String trcFile = 
               GV.getValueStr(conn, "select  c.value || '/' || lower(d.instance_name) || '_ora_' || a.spid || '.trc' " + 
                              " from v$process a, v$session b, v$parameter c, v$instance d\n" + 
                              " where a.addr = b.paddr\n" + " and b.sid = " + 
                              sid + " and c.name = 'user_dump_dest'");
           System.out.println("trcfile=" + trcFile);
     
           // extraire l'oracle_home de l'instance pour trouver le full path de tkproff.
           String ORACLE_HOME="";
           String sqlCmd="declare\n" +
           "OH varchar2(100);\n" + 
           " begin\n" + 
           "    dbms_system.get_env('ORACLE_HOME', OH);\n" + 
           "     :1:=OH;" +
           "end;";
     
           CallableStatement stmt;
           try {
                    stmt = conn.prepareCall(sqlCmd);
                    stmt.registerOutParameter(1,Types.VARCHAR);
                    stmt.execute();
                    ORACLE_HOME=stmt.getString(1);
                    stmt.close();
           }  catch (SQLException e) {
                 GV.display_msg_box(this,e.toString() );
            }
            System.out.println("Oracle_home=" + ORACLE_HOME)     ;
           // maintenant on execute le tkprof 
           // la variable 'arg' contient le full path du fichier a traiter     
     
           sqlCmd="create or replace and compile\n" + 
           "java source named exec_cmd_j\n" + 
           "as\n" + 
           "public class exec_cmd_j {\n" + 
           "   public static String doit_j(String arg)\n" + 
           "   {\n" + 
           "    String ret=\"job done\";\n" + 
           "    try {\n" + 
           "      Process p = Runtime.getRuntime().exec(\""+ORACLE_HOME+"/bin/tkprof \" + arg + \" /tmp/ff2.prf\");\n" + 
           "      p.waitFor();\n" + 
           "    }\n" + 
           "    catch (Exception e) {\n" + 
           "          ret=\"Error : \" + e.toString(); }\n" + 
           "    finally\n" + 
           "    {\n" + 
           "    return ret;\n" + 
           "    }\n" + 
           "   }\n" + 
           "}\n" ;
           System.out.println("sqlCmd=" + sqlCmd);
           // voici notre wrapper PL/SQL de la fonction java
           String sqlCmd1="create or replace\n" + 
           "function doit_j( p_cmd in varchar2) return varchar2\n" + 
           "as\n" + 
           "language java\n" + 
           "name 'exec_cmd_j.doit_j(java.lang.String) return String';\n";
           System.out.println("sqlCmd1=" + sqlCmd1);       
           String sqlCmd2="select doit_j('" + trcFile + "') from dual";
           try {
                    stmt = conn.prepareCall(sqlCmd);
                    stmt.execute();
                    stmt = conn.prepareCall(sqlCmd1);
                    stmt.execute();
                    stmt.close();
                    String ret=GV.getValueStr(conn,"select doit_j('" + trcFile + "') from dual");
                    System.out.println("ret=" + ret);
           }  catch (SQLException e) {
                 GV.display_msg_box(this,e.toString() );
            }  
       }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Points : 38
    Points
    38
    Par défaut
    Je me répond à-moi même.

    Apparemment jamais personne n'as essayé de créer une java procédure sur le Serveur Oracle à partir de Java/JDBC. étonnant.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Salut,
    Ca sent grandement le problème de driver JDBC. Je suppose que tu utilises le classes12.jar.
    Si tel est le cas, pourrais-tu essayer le ojdbc14.jar.

    ________________________
    http://blog.ostyn.fr

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Points : 38
    Points
    38
    Par défaut
    J'utilise la version 'ojdbc6.jar' qui comme son nom ne l'indique pas est le JDBC Oracle 11g.

    Comme j'ai pas réussi à trouver une seule référence a quelqu'un ayant reussi a channeler un "create or replace and compile ... Langage is Java' j'en suis venu a conclure que c'est pas possible : ----> Java in JDBC not supported.

    <--- ceci est un développeur Java sous Oracle

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par murgen23 Voir le message
    J'utilise la version 'ojdbc6.jar' qui comme son nom ne l'indique pas est le JDBC Oracle 11g.

    Comme j'ai pas réussi à trouver une seule référence a quelqu'un ayant reussi a channeler un "create or replace and compile ... Langage is Java' j'en suis venu a conclure que c'est pas possible : ----> Java in JDBC not supported.

    <--- ceci est un développeur Java sous Oracle
    j'ai pas bien compris ta question mais essperont que ça t'aide :

    http://java.sun.com/docs/books/tutor...asics/sql.html

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/07/2012, 09h06
  2. Réponses: 2
    Dernier message: 14/12/2009, 15h30
  3. Réponses: 4
    Dernier message: 02/10/2009, 13h41
  4. chart à partir d'une stored procedure
    Par fayoub dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 15/08/2007, 14h26
  5. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo