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

 Oracle Discussion :

probleme de PL/SQL sur 10g


Sujet :

Oracle

  1. #1
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut probleme de PL/SQL sur 10g
    bonjour à tous,

    j'ai hérité d'une jolie BD en oracle 9i avec un PL/SQL qui tournait du feu de dieu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      PROCEDURE EcritStatusDansFichier(Repertoire CHAR, Status INTEGER) IS
     
      w_id UTL_FILE.FILE_TYPE; 
     
      BEGIN
          w_id := UTL_FILE.FOPEN(Repertoire, 'Status.txt', 'w');
          UTL_FILE.PUT_LINE(w_id, TO_CHAR(Status));
          UTL_FILE.FCLOSE(w_id);
     
      EXCEPTION
          WHEN OTHERS THEN
               Trace('>>EcritStatusDansFichier: Erreur lors écriture dans fichier status');
      END EcritStatusDansFichier;
    je constate après migration vers une base en 10g que plus rien ne s'ecrit jamais dans ce fichier. Quand je regarde la FAQ du site: http://sheikyerbouti.developpez.com/...e=Chap8#L8.2.5 une ligne me fait très très peur:
    " Ouverture d'un fichier Oracle 8i, 9i"

    dois ré écrire les fonctions et procédue pour la 10g????

    help

  2. #2
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Comment as-tu migre ? Est-ce que le repertoire a bien ete declare (DBA_DIRECTORIES) ? Existe ? Existe avec les bons droits ?

    Nicolas.

  3. #3
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    ouille ouille, je ne connais pas le DBA_DIRECTORIES

    moi j'ai intégré à ma base un package que j'ai intégré par le user SYS:

    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
     
    CREATE OR REPLACE PACKAGE Banc AS
      PROCEDURE EcritStatusDansFichier(Repertoire CHAR, Status INTEGER);
    END Banc;
    /
     
    CREATE OR REPLACE PACKAGE BODY Banc AS
    PROCEDURE EcritStatusDansFichier(Repertoire CHAR, Status INTEGER) IS
     
      w_id UTL_FILE.FILE_TYPE; 
     
      BEGIN
          w_id := UTL_FILE.FOPEN(Repertoire , 'Status.txt', 'w');
          UTL_FILE.PUT_LINE(w_id, TO_CHAR(Status));
          UTL_FILE.FCLOSE(w_id);
     
      EXCEPTION
          WHEN OTHERS THEN
               Trace('>>EcritStatusDansFichier: Erreur lors écriture dans fichier status');
      END EcritStatusDansFichier;
    END Banc;
    /
    ensuite cette procédure est régulièrement appelé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Banc.EcritStatusDansFichier('&3', status);

  4. #4
    Invité
    Invité(e)
    Par défaut
    La réponse est déjà là :
    Citation Envoyé par NGasparotto Voir le message
    Est-ce que le repertoire a bien ete declare (DBA_DIRECTORIES) ? Existe ? Existe avec les bons droits ?
    http://oracle.developpez.com/faq/?page=4-9#directory

    Est-ce que les users courants ont les droits sur ce package de SYS ?

  5. #5
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    donc non je n'avais pas ça j'ai donc fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE OR REPLACE DIRECTORY REPERTOIRE AS 'E:\APP';
    GRANT WRITE to banc;
    maintenant j'ai fait un test sur mon fichier status.txt
    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
     
      PROCEDURE EcritStatusDansFichier(Rep CHAR, Status INTEGER) IS
     
      w_id UTL_FILE.FILE_TYPE; 
     
      BEGIN
          w_id := UTL_FILE.FOPEN(REPERTOIRE, 'Status.txt', 'w');
          UTL_FILE.PUT_LINE(w_id, TO_CHAR(Status));
          UTL_FILE.PUT_LINE(w_id, 'test');
          UTL_FILE.FCLOSE(w_id);
     
      EXCEPTION
          WHEN OTHERS THEN
               Trace('>>EcritStatusDansFichier: Erreur lors écriture dans fichier status');
      END EcritStatusDansFichier;
    cette ligne: w_id := UTL_FILE.FOPEN(REPERTOIRE, 'Status.txt', 'w'); semble ne plus compilé pourtant mon utilisateur a eu un grant write on directory REPERTOIRE to monUSER;

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Normal :
    FOPEN prend un VARCHAR comme premier argument.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE EcritStatusDansFichier(Rep CHAR, STATUS INTEGER) IS
     ..
          w_id := UTL_FILE.FOPEN(REPERTOIRE, 'Status.txt', 'w');
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE EcritStatusDansFichier(Rep CHAR, STATUS INTEGER) IS
     ..
          w_id := UTL_FILE.FOPEN(Rep , 'Status.txt', 'w');
    et tu appelles la procédure avec
    EcritStatusDansFichier('REPERTOIRE', ...);

  7. #7
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    j'ai peut etre dans ce cas mal compris le fonctionnement de "DBA_DIRECTORIES"

    C'est mon utilisateur SYS qui a généré la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR REPLACE DIRECTORY REPERTOIRE AS 'E:\APP';
    GRANT READ, WRITE ON DIRECTORY REPERTOIRE TO banc;
    je pensais de là que banc pouvait utiliser REPERTOIRE comme on utiliserait un SYNONYM

    quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BancPK.EcritStatusDansFichier('&3', 'REPERTOIRE');
    je vois dans mes logs trace, qu'il essaie d'utiliser le repertoire 'REPERTOIRE' et non la localisation systeme.

    Pourtant ma procedure semble conforme à ce qui a été dit plus haut:
    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
    PROCEDURE EcritStatusDansFichier(Repertoire CHAR, Status INTEGER) IS
     
      w_id UTL_FILE.FILE_TYPE; 
      ChaineBis   VARCHAR2(10000);
     
      BEGIN
          w_id := UTL_FILE.FOPEN(Repertoire, 'Status.txt', 'w');
    'Status.txt', 'w');
          UTL_FILE.PUT_LINE(w_id, TO_CHAR('un commentaire a ecrire'));
          UTL_FILE.FCLOSE(w_id);
     
      EXCEPTION
          WHEN OTHERS THEN
               Trace('>>EcritStatusDansFichier: Erreur lors écriture dans fichier status');
      END EcritStatusDansFichier;
    ce que je m'explique assez mal c'est pourquoi cette procedure fonctionne sous oracle 9i et pas sous oracle 10g???

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Sûrement un problème de cote !!!
    Salut,

    Je pense que le problème provient plus de l'appel de tes variables systèmes ORACLE. Elles doivent être entre cote '.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE DIRECTORY CST_REPERTOIRE_ORCALE AS 'Ton repertoire sur tes HDD ou lecteur réseau';
    GRANT READ, WRITE ON DIRECTORY CST_REPERTOIRE_ORCALE TO ton_user;
    GRANT all privileges ON DIRECTORY CST_REPERTOIRE_ORCALE TO ton_user;
    Bon, on est large avec les droits, mais si ça marche après tu pourras restreinte comme tu le souhaites.

    Et ensuite, tu mets les cotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    w_id := UTL_FILE.FOPEN('CST_REPERTOIRE_ORCALE', Fichier, 'r', 3000);

  9. #9
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    effectivement c'est la solution.

    merci

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

Discussions similaires

  1. probleme localhost.sql sur phpmyadmin
    Par Akramweb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/08/2012, 12h59
  2. probleme sql sur access
    Par bart93100 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 04/02/2009, 16h31
  3. probleme avec sql sur formulaire multicritères
    Par crash_fr dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/08/2008, 00h31
  4. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  5. [Oracle 10g]probleme avec une CONSTRAINT sur UPDATE
    Par Battosaiii dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/04/2006, 19h05

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