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 :

execution d'une procédure


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut execution d'une procédure
    Bonjour,

    je suis debutant en PL/SQL et j'aimerais avoir un eclairceissement sur le comportement suivant ... si quelqu'un pouvait m'expliquer le pourquoi ?

    Je vous donne un exemple simple qui n'a rien à voir avec mon code mais qui l'illustre bien :

    Cas 1 :

    voici une partie de mon script shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sqlplus -s /nolog << fin > $LOGORA
    whenever sqlerror exit
    REM connection à la base
    connect $user_oracle/$mdp_oracle@$instance_oracle ;
    DECLARE
    BEGIN
       EXECUTE IMMEDIATE 'CREATE TABLE test_table
    (champ1 char(50),
    champ2 char(50))';
    END;
    /
    fin
    Je suis connecté avec l'user propriétaire de mon schéma.
    resultat : la table "test_table" a été créé


    Cas 2 : ( celui qui m'interesserait )

    je fais du code précédent une procedure stockée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE OR REPLACE PROCEDURE proc_create
    IS
    BEGIN
       EXECUTE IMMEDIATE 'CREATE TABLE test_table
    (champ1 char(50),
    champ2 char(50))';
    END;
    /
    Resultat lors de l'appel de la procedure dans mon script : la table n'est pas créé et j'obtiens l'exception "ORA-01031: privilèges insuffisants"


    Quels sont les droits qu'il me manque ??

    Merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2003
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 701
    Points : 741
    Points
    741
    Billets dans le blog
    1
    Par défaut
    bonjour,

    c 'est une erreur classique sous pl/sql (aberration oracle ?)
    les privileges accordés à un utilisateur via un rôle ne sont pas valables
    en pl/sql .
    il faut spécifier clairement les droits à l' utilisateur :

    dans ton cas , en l' occurence, le privilége create table .

    cdlt

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    parce que tu as un ROLE qui contient le privilége CREATE TABLE. Mais dans une procédure stockée tu dois avoir le privilége affecté directement à l'utilisateur parce que le ROLE n'est pas pris en compte.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT CREATE TABLE TO <ton_user>;
    et après toutes les procédures pourront créer la table.

    Ceci étant dit, le choix du PL/SQL pour faire du code DDL est déconseillé. Tu aurais pu faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sqlplus -s /nolog << fin > $LOGORA
    whenever sqlerror exit
    REM connection à la base
    connect $user_oracle/$mdp_oracle@$instance_oracle ;
    CREATE TABLE test_table
    (champ1 char(50),
    champ2 char(50));
    fin

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut merciiii
    Merci beaucoup pour les reponses claires et rapides de plus !

    pour le create table c'etait juste un exemple, j'avais en fait un problème avec la fonction open de dbms_datapump.
    Je vais voir ça avec mon DBA

    Merci encore

    bye

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/04/2008, 15h23
  2. Réponses: 3
    Dernier message: 01/12/2006, 12h58
  3. [RMI]Probleme d'execution d'une procédure distante
    Par mawashee dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 07/10/2006, 20h12
  4. [VBA]Execution d'une procédure avec un ComboBox sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/01/2006, 09h27
  5. Execution d'une procédure en parallèle d'une autre
    Par Nouni dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/02/2004, 07h06

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