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 :

[9i] Procédure unique variant selon l'utilisateur


Sujet :

Oracle

  1. #1
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut [9i] Procédure unique variant selon l'utilisateur
    Bonjour, j'ai une p'tit souci :

    j'ai une table "trace" dans le schéma_1
    j'ai une procedure "p_trace" dans le schéma_1, qui alimente "trace"

    j'ai une autre table "trace" dans le schéma_2
    je souhaite l'alimenter en utilisant "p_trace", cependant, "p_trace" alimente la table "trace" du schéma_1.
    comment faire pour qu'elle aliment la table trace du schéma via lequel on l'appele

    1) connecté sur schéma_2, lancer schema_1.p_trace : alimente schéma_2.trace
    2) connecté sur schéma_1, lancer schema_1.p_trace : alimente schéma_1.trace

    kk1 à une solution ?

    merci d'avance

    [Modération : titre édité par LeoAnderson]

  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

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Etant donné que votre procédure change en fonction du contexte (l'utilisateur qui la lance) il vous faut passer par du SQL dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE OR REPLACE PROCEDURE ...
    ... 
       Requete VARCHAR2(4000);
    BEGIN
       SELECT User INTO User_Courant FROM DUAL;
       Requete := 'INSERT INTO '||User_Courant||'.Table1 (Col1, '||...;
     
       Execute Immediate Requete Using ...
    END;
    /
    Le principe est donc de générer une chaine de caractères contenant la requête qui sera exécutée.

  4. #4
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Ben, c'est bien ce qui me semblait pour le sql dynamique.

    Mais il y a aucune autre solution ??

    Genre le schéma_2 se substitue au schéma_1 quand celui ci s'exécute en tant que schéma_1 ???

  5. #5
    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
    avez-vous seulement lu le lien que je vous ai communiqué ?! :

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Le fonctionnement de la procédure n'étant pas figé -puisqu'il varie selon le contexte- la solution ne peut pas être du SQL statique !

    Il faut donc passer par le SQL dynamique ...

  7. #7
    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
    ???

    j'ai beau relire la question initiale, la question est bien : comment utiliser les tables de l'utilisateur qui exécute une procédure plutôt que les tables du créateur de la procédure.

    Non ?

  8. #8
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut Re: [oracle 9i] utilisation multi-schéma
    Certes, mais une partie de la question est :
    Citation Envoyé par sygale
    1) connecté sur schéma_2, lancer schema_1.p_trace : alimente schéma_2.trace
    2) connecté sur schéma_1, lancer schema_1.p_trace : alimente schéma_1.trace
    donc, la procédure devra réaliser des insertions dans une table inconnue au moment de la compilation puisque la table sera propriétaire de l'utilisateur qui appelle la procédure (si ça se trouve, l'utilisateur n'aura même pas la table...)

    non ?

  9. #9
    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
    La table n'est pas inconnue, puisque dans tous les schémas elle porte le même nom : TRACE

  10. #10
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    SheikYerbouti, j'ai bien lu ton lien, mais je pensais pas que si l'utilisateur schéma_2 exécutait une procédure schéma_1, il allait alimenter la table schéma_1.trace plutot que schéma_2.trace.

    Ca sit je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    connect shcéma_2;
    insert into trace (id) values(1);
    Cela insert bien dans schéma_2, mais si je passe par une procdure de schéma_1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    procedure add_trace(id number)
       insert into trace (id) values(1);
    end;
    Si j'exécute via l'utilisateur schéma_2 la procédure schéma_1.add_trace, la ligne insérée est présente dans schéma_1.trace et non dans schéma_2.trace comme je le souhaite.

  11. #11
    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
    Raison pour laquelle vous compilez UNE procédure avec le pragma ATHID CURRENT_USER et vous donnez le droit d'exécution à vos utilisateurs.

    le user1 insérera dans la table TRACE du user1,
    le user2 insérera dans la table TRACE du user2, etc.

  12. #12
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par SheikYerbouti
    Raison pour laquelle vous compilez UNE procédure avec le pragma ATHID CURRENT_USER et vous donnez le droit d'exécution à vos utilisateurs.

    le user1 insérera dans la table TRACE du user1,
    le user2 insérera dans la table TRACE du user2, etc.
    Ca c'est une soluce de ouf merci bcp SheikYerbouti

    apres kk tests cela fonctionne exactement comme je le souhaite

    Cependant, connais tu des restrictions, genre si deux user différents l'appel en même temps, cela ne pause par de pb.
    en théorie non car je pense qu'ORACLE a fait cette option pour ca !!

    En tout cas merci bcp, tu sauves la livraison

  13. #13
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Citation Envoyé par sygale
    En tout cas merci bcp, tu sauves la livraison
    Eh hop, une caisse de champ' pour Sheik !

  14. #14
    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
    Citation Envoyé par sygale
    Cependant, connais tu des restrictions, genre si deux user différents l'appel en même temps, cela ne pause par de pb.
    en théorie non car je pense qu'ORACLE a fait cette option pour ca !!
    aucune restriction, d'autant plus que 2 users = 2 sessions différentes.

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

Discussions similaires

  1. rendre invisible selon l'utilisateur
    Par makroute dans le forum SharePoint
    Réponses: 2
    Dernier message: 05/12/2007, 14h45
  2. Ajout de feuilles variant selon les résultats
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 03/09/2007, 16h07
  3. ré-affichage d'un msgbox dans x jours (selon choix utilisateur)
    Par léclaireur dans le forum Général VBA
    Réponses: 6
    Dernier message: 03/05/2007, 09h48
  4. [JSP] Personnalisation de l'interface selon l'utilisateur
    Par Pashmina dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 11/04/2006, 11h34
  5. Numérotation automatique selon les utilisateurs
    Par Safaritn dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/08/2005, 15h11

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