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

PL/SQL Oracle Discussion :

Interdire à un utilisateur de faire partie de deux groupes (appartenance = jointure)


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Interdire à un utilisateur de faire partie de deux groupes (appartenance = jointure)
    Bonjour,

    J'espère que tout le monde va bien

    J'ai un nouvel os à ronger et peut-être pourrez-vous m'aider...

    J'ai un utilisateur A qui peut potentiellement apartenir à deux groupes G1 ou G2 mais il ne doit pas pouvoir être à la fois dans G1 et dans G2.

    Comme ça d'instinct, je pense à faire une contrainte check mais à la vue de ce que j'ai lu, je n'ai pas l'impression que ça soit facile.

    Mon chef de projet m'a dit de ne pas utiliser un trigger.

    D'après vous, pour une telle contrainte, vaut-il mieux utiliser une contrainte Check ou un trigger ?

    Si c'est la contrainte check j'aimerais bien avoir un lien vers un exemple

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Tout dépend de votre modèle de données...
    Si G1 et G2 sont deux tables différentes ce n'est pas la même chose que si G1 et G2 sont des données de la même table.

    Sand ls description de vos tables sous forme DDL (CREATE TABLE...) impossible de vous répondre !

    A +

  3. #3
    Membre habitué Avatar de Nadinette
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Salut,

    Meaculpa pour ma mauvaise formulation...

    En fait, G1 et G2 sont des tables différentes et j'ai lu que les contraintes check ne s'appliquaient qu'aux champs d'une même table, j'ai donc convaincu mon CDP de passer par un trigger et ça fonctionne.

    Voici le code :

    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
    23
    24
    25
    26
    27
    28
     
    create or replace
    trigger 
    	TRG_SEQ_T_SEC_USERINTRADEBOOK     
    before insert on 
    	"T_SEC_USERINTRADEBOOK"    
    REFERENCING NEW as New OLD as Old
    FOR EACH ROW 
    DECLARE
      cnt Number(10,0);
      BEGIN
          SELECT count(*) INTO cnt FROM T_SEC_USERINSALESTEAM 
          WHERE T_SEC_USERINSALESTEAM.FK_T_SEC_USER = :NEW."FK_T_SEC_USER";
          if cnt > 0 then 
            raise_application_error (-20000,'User already in a sales team'); 
          end if;
          SELECT count(*) 
            INTO cnt 
          FROM T_SEC_USERINROLE I INNER JOIN 
            T_SEC_ROLE R ON I.FK_T_SEC_ROLE = R.ID 
          WHERE R.TRADEBOOKALLOWED = 1 AND I.FK_T_SEC_USER = :NEW."FK_T_SEC_USER";
          if cnt < 1 then 
            raise_application_error (-20001,'User must be in a role allowing to be in a trade book'); 
          end if;
          if :NEW."ID" is null then          
            select SEQ_T_SEC_USERINTRADEBOOK.nextval into :NEW."ID" from dual;       
          end if;          
      END;
    Merci pour ton intéret pour ma question

    Bonne journée

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2013, 20h36
  2. Réponses: 3
    Dernier message: 31/10/2012, 11h56
  3. comment faire pour aligner deux partie d'une table enboitée
    Par felosa dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 27/05/2008, 22h03
  4. Peut on faire un selon à deux conditions ?
    Par Celia1303 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 18/10/2005, 17h16
  5. Réponses: 3
    Dernier message: 12/05/2005, 19h26

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