Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre du Club Avatar de Nadinette
    Femme Profil pro Nadine M
    Développeur Web
    Inscrit en
    octobre 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Nom : Femme Nadine M
    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 : 95
    Points : 56
    Points
    56

    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 Frédéric BROUARD
    Expert SGBDR & SQL
    Inscrit en
    mai 2002
    Messages
    13 294
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric BROUARD
    Localisation : France

    Informations professionnelles :
    Activité : Expert SGBDR & SQL
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 13 294
    Points : 27 316
    Points
    27 316

    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 +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
    http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  3. #3
    Membre du Club Avatar de Nadinette
    Femme Profil pro Nadine M
    Développeur Web
    Inscrit en
    octobre 2012
    Messages
    95
    Détails du profil
    Informations personnelles :
    Nom : Femme Nadine M
    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 : 95
    Points : 56
    Points
    56

    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •