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 :

Contrainte et références aux autres entrées


Sujet :

Langage SQL

  1. #1
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut Contrainte et références aux autres entrées
    Bonjour à tous.

    J'ai une table dont deux champs correspondent grossièrement aux bornes d'un segment.

    Je souhaite lors de l'insertion dune nouvelle ligne dans ma table, vérifier qu'il n'y a pas de d'overleap, ie que les bornes ne chevauchent pas.

    Par exemple, si ma table ressemble a ça :
    Lower | Upper
    ---10--|-13
    ---20--|-28

    Je peux faire une insertion 14-19 ou 29-31 ou encore 14-15 mais pas 11-15 ni 22-26.

    Au final ma question se résume à : comment faire référence aux entrées de la table dans un CHECK.

    Ou si ya pas moyen, quelles sont les alternatives ?

    PS : désolé si la question semble facile, je débute en SQL.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Cherchez un peu... Dans mon blog la réponse y figure au moins 2 fois.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Oki, je viens de trouver les articles en question.

    Je reviens ici même dès demain en cas de soucis.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Avec les articles, jai decouvert les fonctions en SQL.

    Jai ecrit ca
    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
    CREATE OR REPLACE FUNCTION shall_we_insert(a_ integer, b_ integer)
      RETURNS boolean AS
    $BODY$
       DECLARE
           obj testtable%ROWTYPE;
    BEGIN
    FOR obj IN SELECT * FROM testtable
          LOOP
        IF  a_ <= obj.b AND obj.a <= a_ THEN 
            RETURN FALSE;
        END IF;
     
        IF  b_ <= obj.b AND obj.a <= b_ THEN 
            RETURN FALSE;
        END IF; 
     
          END LOOP;
    RETURN TRUE;
    END
    $BODY$
      LANGUAGE plpgsql VOLATILE;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT test_overlap CHECK (shall_we_insert(a, b))
    Et ca marche bien.

    Si ya une meilleure maniere de faire, je suis preneur
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Ne faites qu'une seule requête ensembliste dans votre fonction. Ce sera optimisé... Sinon, vous risquez gros au niveau des perfs...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Ne faites qu'une seule requête ensembliste dans votre fonction. Ce sera optimisé... Sinon, vous risquez gros au niveau des perfs...

    A +
    L'idél c'est que je ne fasse qu'une requête et je boucle sur les résultats qu'elle me renvoie.
    Et l'état actuel, je refais la requête à chaque tour de boucle ?
    Faudrait donc que je puisse l'executer 1 seule fois et stocker les résultats.

    Je vais googler ca demain au boulot et reviendrai pour confirmation ou si j'y arrive pas
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Est ce que ceci est mieux ?

    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
     
    CREATE OR REPLACE FUNCTION check_constraint(low integer, up integer)
      RETURNS boolean AS
    $BODY$  
    BEGIN
       PERFORM * FROM tabletest
           AND ( (low <= b AND a <= low) 
             OR (up <= b AND a <= up) );
     
       IF NOT FOUND THEN
        RETURN TRUE;
       ELSE 
        RETURN FALSE;
       END IF;
    END
    $BODY$
      LANGUAGE plpgsql VOLATILE
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Agrandissement/Réduction de rectangle, les uns par rapport aux autres avec contrainte
    Par zuzuu dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/01/2008, 16h34
  2. Frequence processeur par rapport aux autres composants
    Par black is beautiful dans le forum Composants
    Réponses: 7
    Dernier message: 02/02/2006, 19h08
  3. Réponses: 12
    Dernier message: 08/12/2004, 12h12
  4. Interbase en réseau:commit ne s'appliquent pa aux autres pc?
    Par Harry dans le forum Bases de données
    Réponses: 9
    Dernier message: 27/05/2004, 14h10

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