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

SQL Oracle Discussion :

v$datafile doit être declaré


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut v$datafile doit être declaré
    Bonjour.
    J'utilise Oracle 9i.
    J'ai un petit probème avec une procédure stockée PL/SQL. Dans la partie déclaration j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TYPE TabData IS TABLE OF V$DATAFILE.NAME;
    Et cela me renvoie l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PLS-00201 : l'identificateur V$DATAFILE doit être declaré
    J'essaie de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM V$DATAFILE;
    sous SQLPLUS et cela ne retourne pas d'erreur, j'obtiens des résultats.
    J'ai aussi essaié de re créer le synonyme publique V$DATAFILE mais cela n'a pas résolu mon problème.
    Alors que si j'execute la même procédure sous Oracle 8 ça marche, il n'y a aucune erreur.
    Est-ce que quelqu'un pourrait m'expliquer? Je suis pas expert en PL/SQL.
    Merci.

  2. #2
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Il manque le %type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TYPE TabData IS TABLE OF V$DATAFILE.NAME%TYPE;
    Pour mémoire, on met %TYPE pour préciser que le type est le même que la colonne prise en référence,et %ROWTYPE pour préciser que la structure est la même que la table ou la vue prise en référence

  3. #3
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Désolé, c'est moi qui ai oublié de mettre %type dans mon message, mais dans la procédure j'ai bien mis %type. Je ne sais pas pourquoi cela ne marche pas.

  4. #4
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Tu l'as peut être déjà fait, mais bon, as-tu regardé que le schéma qui contient ta procédure stockée a bien accès à la vue en question ?
    Ainsi que le user qui compile la procédure

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    note que la vue ne s'appelle pas V$DATAFILE mais "SYS"."V_$DATAFILE" !

    Il faut donc avoir un grant sur la vue et non sur le synonyme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL>  grant create session, create procedure to u identified by u;
     
    Grant succeeded.
    SQL> grant select on sys.v_$datafile to u;
     
    Grant succeeded.
    SQL> connect u/u
    Connected.
    SQL> create or replace procedure p is 
      2  type tabdata is table of v$datafile.name%type; 
      3  begin null; end;
      4  /
     
    Procedure created.

  6. #6
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Bonjour.
    Merci pour vos réponses. Pour l'instant j'ai un petit problème avec mon ordi, mais dès que ce sera reglé je vais essayer les solutions que vous aviez proposées, et je vous communiquerai la suite.
    Merci.

Discussions similaires

  1. [WebForms]A quel endroit doit-être présent le framework ?
    Par HULK dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 13/04/2006, 14h59
  2. [Client/Serveur]Où doit être mis outil mesure Performances?
    Par sabure dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 06/03/2006, 23h52
  3. Réponses: 4
    Dernier message: 24/02/2006, 11h50
  4. dans un CSS que le texte doit être souligé?
    Par hstlaurent dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 01/09/2005, 16h06
  5. fonction "variable doit etre declare"
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/05/2004, 20h55

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