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

PL/SQL Oracle Discussion :

java pl sql dbms log


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut java pl sql dbms log
    Bonjour,

    J'ai un script pl/sql que je lance depuis Java.

    Il s'agit d'un script de purge.

    voici une partie du code pl sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELETE FROM MOUVEMENT_CERES WHERE.....
    DBMS_OUTPUT.PUT_LINE('Mouvement CERES supprimée') ;
    DELETE FROM MOUVEMENT_TOTO WHERE....
    DBMS_OUTPUT.PUT_LINE('Mouvement TOTO supprimée') ;
    DELETE FROM MOUVEMENT_TITIWHERE....
    DBMS_OUTPUT.PUT_LINE('Mouvement TITI supprimée') ;
    En java, j'appel le code de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CallableStatement plsqlBlock = queryRunner.prepareCall (requetePLSQL);
    plsqlBlock.execute();
    J'aimerai pouvoir afficher en continue les logs des lignes des tables qui ont été supprimées pendant l'exécution du script,mais elles ne s'affichent pas.

    J'ai donc suivi les indications de ce site : http://asktom.oracle.com/pls/asktom/f?p=100:11:0:::11_QUESTION_ID:45027262935845

    Mais il m'affiche les logs du pl/sql à la fin de l'éxecution et non pendant.

    Je demande cela car comme le script pl/sql est long, c'est pour informer l'utilisateur où en est le script.

    Merci d'avance.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je n'ai pas trop de compétences en Java.
    Mais dans ton traitement plsql tu peux mettre à jour une info de la session (dbms_application_info.set_action) que tu pourrais lire depuis une autre session Oracle

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    je vais essayer de voir si c'est possible.

    Peut être en lançant 2 threads. mais bon, je suis sceptique

    merci pour ta piste, je vais essayer

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    J'avais laissé tombé ce problème.... Mais finalement, j'en ai besoin ....

    J'ai essayé d'utiliser spool > nomfichier en début de mon script pl sql. Mais c'est une commande PL/SQL et donc comme j'exécute mon script à partir de java, ça fonctionne pas...

    J'ai essayé d'utiliser UTF_FILE, mais ça ne marche pas car n'ayant pas les droits système pour changer le répertoire.. je ne peux rien faire.....

    Il y a une autre solution mais je ne sais pas si c'est performant...
    Connaissant les tables à supprimer, je stockerai dans une liste les noms des tables :

    voici la solution :

    Code JAVA
    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
     
    List listeTablesASupprimer = new ArrayList();
    listeTablesASupprimer.add("MOUVEMENT_CERES");
    listeTablesASupprimer.add("MOUVEMENT_TOTO");
    listeTablesASupprimer.add("MOUVEMENT_TITI");
     
    Iterator itTablesASupprimer = listeTablesASupprimer.iterator();
    while (itTablesASupprimer .hasNext()) {
      String nomTable = (String) itTablesASupprimer.next();
      CallableStatement plsqlBlock = queryRunner.prepareCall (requetePLSQL);
      //je passe ici en paramètre le nom de la table au script pl/sql.  
      //je me souviens plus de la syntaxe exacte du passage de paramètre
      //j'écris un truc bidon
      plsqlBlock.addParameter(nomTable)
      //execute du bloc pl/sql
      plsqlBlock.execute();
     
     //J'affiche ici mon log.
      log.info ("TABLE " + nomTABLE + " supprimée");
     
     
     
    }
    voici le script pl/sql.
    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
     
    declare
    nomtable VARCHAR := ?; //je récupère la table passé en paramètre depuis le code JAVA
    begin
    ....
    if (nomtable == 'MOUVEMENT_CERES') then
     DELETE FROM MOUVEMENT_CERES WHERE.....
    endif
     
    if (nomtable == 'MOUVEMENT_TOTO') then
     DELETE FROM MOUVEMENT_TOTO WHERE....
    end if 
     
    if (nomtable == 'MOUVEMENT_TITI') then
      DELETE FROM MOUVEMENT_TITIWHERE....
    end if
    ...
    Evidemment, ne faites pas gaffe à la syntaxe, je n'ai pas modifié encore mon code. Je l'écris comme ça uniquement pour le forum.. Je ne peux pas le tester actuellement. C'est juste un pseudo-code.J'aimerai juste avoir votre avis sur ce sujet.

    Actuellement, je supprime environ 250 tables.
    Donc 250 boucles.. donc 250 prepareCall...

    Qu'en pensez-vous ?

    merci..

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    il y aurait une autre solution.

    ça serait d'ajouter les logs dans une table...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DELETE FROM MOUVEMENT_CERES WHERE.....
    INSERT INTO LOG values (S_LOG.NEXT_VAL, "mouvement ceres supprimée");
    DELETE FROM MOUVEMENT_TOTO WHERE....
    INSERT INTO LOG values (S_LOG.NEXT_VAL, "mouvement toto supprimée");
    DELETE FROM MOUVEMENT_TITI WHERE....
    INSERT INTO LOG values (S_LOG.NEXT_VAL, "mouvement titi supprimée");
    Or si y a un pb sur un delete, il faut faire un rollback sur les delete et non les insert ....

    avez-vous une idée sur ce point là ?

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Il faut créer une procédure autonome :
    PRAGMA AUTONOMOUS_TRANSACTION

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. java requete SQL à *.mdb
    Par Belegkarnil dans le forum JDBC
    Réponses: 4
    Dernier message: 18/03/2006, 11h24
  2. Communication JAVA & PL/SQL
    Par Titouf dans le forum PL/SQL
    Réponses: 1
    Dernier message: 12/01/2006, 10h18
  3. java et sql server
    Par vijeo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/10/2005, 09h57
  4. [JDBC]Eclispe java et sql 2000
    Par vijeo dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/10/2005, 11h31
  5. Réponses: 2
    Dernier message: 06/10/2004, 18h09

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