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 :

Vue avec clause Where en fonction du USER


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Points : 87
    Points
    87
    Par défaut Vue avec clause Where en fonction du USER


    j'ai une table T1 avec une vue V_T1

    j'ai un grand nombre de user qui doive accéder à cette vue mais pour intervenir que sur un nombre d'enregistrement limité par une clause Where dans la vue de type WHERE NAME_USER = où NAME_USER est un champ de la table T1

    donc la 1ère solution est de céer une vue pour chaque USER

    la 2ème serait de mettre en place une procédure qui fait varier la clause Where en fonction du USER qui se connect à la vue

    Quelqu'un a déjà t'il mis en place ce principe et comment ?

    Merci d'avance

    Lunab

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Une solution possible utilise une procédure stockée avec un contexte applicatif et qui retourne un REF CURSOR. Voir pour la solution générale sur AskTom http://asktom.oracle.com/pls/ask/f?p...:1288401763279 et pour les contextes applicatifs la documentation officielle:
    http://download-uk.oracle.com/docs/c...02.htm#1008543

  3. #3
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux employer la fonction USER() dans ta vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    select * from emp where ename=user;
         EMPNO ENAME      JOB              MGR HIREDATE                   
    ---------- ---------- --------- ---------- ------------------- 
          7788 SCOTT      ANALYST         7566 19.04.1987 00:00:00

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par laurentschneider
    tu peux employer la fonction USER() dans ta vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    select * from emp where ename=user;
         EMPNO ENAME      JOB              MGR HIREDATE                   
    ---------- ---------- --------- ---------- ------------------- 
          7788 SCOTT      ANALYST         7566 19.04.1987 00:00:00
    A ma grande surprise, ça fonctionne en 8i (lunab54 n'a pas précisé sa version)
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par laurentschneider
    tu peux employer la fonction USER() dans ta vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    select * from emp where ename=user;
    Ok, mais lorsque je vais insérer un nouvel enregistrement il va falloir un trigger pour mettre à jour le champ ename et là attention à la table mutante, non ?

    Question à pifor :

    est ce que avec le contexte applicatif le problème sera le même sur le champ ename avec un INSERT, ou sera t'il directement géré par le SYS_CONTEXT ?

    Merci d'avance

    PS : Oracle 9.2 avec mes excuses

  6. #6
    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
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux employer une valeur par défaut de USER dans ta table

    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
     
    SCOTT@LSC01> create table t(u varchar2(40) default user, x number);
     
    Table created.
     
    SCOTT@LSC01> create or replace view v as select x from t where u=user;
     
    View created.
     
    SCOTT@LSC01> insert into v values(1);
     
    1 row created.
     
    SCOTT@LSC01> select * from v;
             X
    ----------
             1
     
    SCOTT@LSC01> select * from t;
    U                                                 X
    ---------------------------------------- ----------
    SCOTT                                             1

  7. #7
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Points : 166
    Points
    166
    Par défaut
    comme a dit laurent tu peux mettre default user dans ta colonne comme tu peux mettre aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table t(u varchar2(40) default sys_context('USERENV','CURRENT_USER'),x number)
    juste pour completer l'info

  8. #8
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    est ce que avec le contexte applicatif le problème sera le même sur le champ ename avec un INSERT, ou sera t'il directement géré par le SYS_CONTEXT ?
    Oui le contexte applicatif ne connaît pas vraiment les tables mais comme Oraman l'a montré il peut être utiilisé comme valeur par défaut d'une colonne.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Points : 87
    Points
    87
    Par défaut
    Merci à tous pour vos réponses éclairées

    J'ai plus qu'à essayer tout ça

    Bonne soirée

    Lunab

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/02/2011, 09h18
  2. Retourner tous les enregistrement avec clause Where
    Par GloubGloubGloub dans le forum Access
    Réponses: 3
    Dernier message: 09/09/2006, 00h03
  3. [Débutant] pb avec clause WHERE
    Par bogsy15 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/08/2006, 09h49
  4. [DTS] Problème avec clause WHERE sur Date
    Par bibou dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 28/06/2006, 12h18
  5. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10

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