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

Langage SQL Discussion :

select dans un IF


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut select dans un IF
    Bonjour,

    je cherche à crée un contrainte sur une table (TINFO). En fait si une colonne (INFO_KEY) a une valeur particulière (BASE), alors je dois vérifier que la valeur d'une autre colone (INFO_FIELD) se situe bien dans les valeurs d'une colonne(BASE_TYPE) d'une autre table(TBASE).
    J ene sais pas is c'est très clair, alors voici un exemple de ce que je comptais faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE TRIGGER TR_TINFO_CONSTRAINT BEFORE INSERT OR UPDATE ON TINFO
    FOR EACH ROW
    DECLARE
      LE$Fin  	exception;
    BEGIN
    	  IF :NEW.INFO_KEY = 'BASE' THEN
          IF :NEW.INFO_FIELD NOT IN (SELECT DISTINCT BASE_TYPE FROM TBASE) THEN 
    		    RAISE LE$Fin;
          END IF;
    	END IF;
    END;
    /
    Le problème est que le select dans le if est interdit. Et j'ai beau me creuser les ménages, je ne vois pas d'autre solution.
    Quelqu'un aurait-il la gentillesse de m'aider ?

  2. #2
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    un des astuse
    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
     
    CREATE OR REPLACE TRIGGER TR_TINFO_CONSTRAINT BEFORE INSERT OR UPDATE ON TINFO
    FOR EACH ROW
    DECLARE
      LE$Fin  	exception;
     
      cursor cur is 
      SELECT DISTINCT BASE_TYPE FROM TBASE;
     
      nbr_NEW_INFO_FIELD number;
     
    BEGIN
     
    SELECT count(:NEW.INFO_FIELD )
    into nbr_NEW_INFO_FIELD
    FROM dual
    where :NEW.INFO_FIELD   in (SELECT DISTINCT BASE_TYPE FROM TBASE);
     
     
     
    	  IF :NEW.INFO_KEY = 'BASE' THEN
          IF  nbr_NEW_INFO_FIELD=0 THEN 
    		    RAISE LE$Fin;
          END IF;
    	END IF;
    END;
    autre solutions
    1. ajoutez une contrainte dans la table TINFO
    2. sinon utilisez un curseur


    j'ai ta reponse !!!!
    bonne chanse
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Réponses: 8
    Dernier message: 05/05/2004, 16h28
  3. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  4. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 18h06
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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