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

SQL Oracle Discussion :

Définir la clé en SQL ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Par défaut Définir la clé en SQL ?
    Bonjour,

    savez vous comment avec des instructions SQL je pourrais déterminer avec un count les champs qui constitue la clé d'une table sachant que sur cette table aucune PK n'a été définie ?

    Merci d'avance

    Mederik

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par mederik Voir le message
    savez vous comment avec des instructions SQL je pourrais déterminer avec un count les champs qui constitue la clé d'une table sachant que sur cette table aucune PK n'a été définie ?
    C'est pas possible avec un count (??) puisque ça ramène un entier !

    sinon pour trouver la clef primaire, regarde ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
    FROM all_constraints cons, all_cons_columns cols
    WHERE cons.constraint_type = 'P'
    AND cons.constraint_name = cols.constraint_name
    AND cons.owner = cols.owner
    ORDER BY cols.table_name, cols.position;

  3. #3
    Membre éclairé
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Par défaut
    Arf j'ai souvenir d'avoir ete confronté une fois a ce probleme il y a longtemps et j'avais trouve un SQL avec des count, des sous-requetes si ces souvenir sont bons et en comparant le resultat avec le count(*) de la table.

    Mais je suis tres rouillé en SQL, j'ai predu les reflexes et c'etait il y a longtemps et je ne me souviens plus de la logique. Mais je sais que c'est possible ;-)

  4. #4
    Invité
    Invité(e)
    Par défaut
    Et ma requête ne te satisfait pas puisqu'elle retourne les clefs primaires des tables ? C'était bien ça ton besoin ??

  5. #5
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Citation Envoyé par Jerome_Mtl Voir le message
    Et ma requête ne te satisfait pas puisqu'elle retourne les clefs primaires des tables ? C'était bien ça ton besoin ??
    Je pense que mederik n'a pas définit de clé primaire (le langage SQL le permet...) et veux la deviner.

    L'idée c'est de comparer le nombre de lignes de la table avec le nombre de valeur distinctes dans chaque colonnes.
    Exemple avec MySQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    create table t (
     a integer,
     b integer,
     c integer,
     d integer
    );
    insert into t values
      (1,   2,   NULL,       2),
      (2,   3,   NULL,       4),
      (4,   6,   1,       NULL),
      (9,   6,   NULL,       1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
      (SELECT Count(*) FROM t) AS nbLignes,
      (SELECT Count(DISTINCT a) FROM t) AS nbColA,
      (SELECT Count(DISTINCT b) FROM t) AS nbColB,
      (SELECT Count(DISTINCT c) FROM t) AS nbColC,
      (SELECT Count(DISTINCT d) FROM t) AS nbColD;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nbLignes  nbColA  nbColB  nbColC  nbColD
       4	     4	     3	     1	     3
    Ici, la colonne "a" garanti la propriété d'unicité d'une clé primaire.
    Mais cela reste du bricolage, il faut définir la clé primaire en amont.

    PS: Je pense que pour Oracle il suffit d'ajouter un: "FROM dual;"

  6. #6
    Membre éclairé
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Par défaut
    Citation Envoyé par Oishiiii Voir le message
    Je pense que mederik n'a pas définit de clé primaire (le langage SQL le permet...) et veux la deviner.
    Oui c'est ça; a la différence que ce n'est pas moi qui ait créé cette table

    En effet je cherchais donc à la deviner. Ton script, d'apres mes souvenirs de ce que j'avais fait est encore plus simple que ce que moi j'avais trouvé...

    En tous cas merci à vous deux pour vos réponses

    Bon WE ou bonne semaine, au choix

    Mederik

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/08/2009, 10h26
  2. [Sql Server 2k]Définir délai déconnexion automatique
    Par Filippo dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 14/06/2007, 16h36
  3. Réponses: 2
    Dernier message: 14/05/2007, 16h22
  4. [SQL-SERVER] Définir la BD d'une procédure stockée
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/03/2006, 11h40
  5. [PL/SQL] définir une matrice
    Par lalystar dans le forum Oracle
    Réponses: 5
    Dernier message: 22/02/2005, 15h27

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