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 :

[9iR2][PL/SQL] Comment créer une vue dans un package ?


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut [9iR2][PL/SQL] Comment créer une vue dans un package ?
    Bonjour,

    Pour simplifier :
    Soit un package A, et dans ce dernier il y a une procédure B.

    Dans la procédure B, je voudrais créer une vue, mais le problème c'est qu'Oracle n'aime pas trouver un CREATE dans mon code.

    Comment fait-on pour placer un CREATE VIEW ... ; dans une procédure ?

    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    utiliser l'instruction execute immediate

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    Ca me dit "privilèges inssuffisants"...

    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT EXECUTE IMMEDIATE TO SYSTEM;
    SQL> GRANT EXECUTE IMMEDIATE TO SYSTEM;
    GRANT EXECUTE IMMEDIATE TO SYSTEM
    *
    ERREUR à la ligne 1 :
    ORA-00990: Privilège absent ou non valide


    Et je ne vois pas EXECUTE IMMEDIATE dans la liste des privilèges...

    Qch a installer pour avoir cette instruction ?

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    l'utilisateurqui doit créer la vue doit avoir reçu directement le privilège CREATE VIEW. (GRANT VIEW TO utilisateur)

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Je suis d'accord avec vous, le problème c'est que si je tape directement dans SQL*PLUS mon instruction avec juste CREATE VIEW ..., ça marche ! (Avec le même user.)

    Mais le EXECUTE IMMEDIATE dans ma procédure ne lui plaît pas.
    Je me demande s'il y aurait qch à activer/installer pour pouvoir utiliser ce mot clé.

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    En SQL les droits reçus par un rôle fonctionne, par contre en PL/SQL ou en SQL dynamique les droits doivent avoir été reçus directement.

    Donc dans ton cas, sous SQL*Plus avec le user sys, tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant create view to monuser;
    Et dans ton package :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute immediate 'create view mavue as....';
    Tu trouveras plein d'infos sur ce sujet en faisant une recherche avancée sur le mot "role"

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Je viens d'effectuer l'essai et cela fonctionne !
    Merci à vous ! (SheikYerbouti & plaineR)

    Pour résumer (pour les autres débutants qui seraient dans mon cas) :

    1°) Donner les privilèges :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT CREATE VIEW TO TOTO;
    2°) Créer le package :

    La spécification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR REPLACE PACKAGE PKG_TEST AS
    /* La spécification du package */
    PROCEDURE procMAPROCEDURE(xANNEE IN NUMBER);
     
    END PKG_TEST;
    /
    Le corps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE PACKAGE BODY PKG_TEST AS
    /* Le corps (body) du package */
     
    PROCEDURE procMAPROCEDURE(xANNEE IN NUMBER) IS
     
      BEGIN
    EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW TOTO.VW_MAVUE (CHANNEE) AS (SELECT TOTO.TBTEST.CHANNEE FROM TOTO.TBTEST)';
      END;
     
    END PKG_TEST;
    /
    EXECUTE IMMEDIATE permet d'utiliser CREATE VIEW dans la procédure du package, car en utilisant directement CREATE VIEW cela entraine une erreur de compilation.

    L'argument xANNEE dans l'exemple ne sert à rien... c'est juste pour un exemple de syntaxe...

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

Discussions similaires

  1. comment créer une fonction dans un activex
    Par barhoom dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/03/2007, 18h19
  2. Comment créer une FAQ dans VB ?
    Par jlb59 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 01/07/2006, 08h05
  3. [VB.NET] Comment créer une table dans base de données ?
    Par ptitesouris dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/05/2006, 08h46
  4. Comment créer une somme dans un état?
    Par ivan rung dans le forum Access
    Réponses: 6
    Dernier message: 20/01/2006, 07h56
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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