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 :

Récupérer les clés non utilisées


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut Récupérer les clés non utilisées
    Bonjour,

    J'ai actuellement une table table_RF dont la séquence de la clé primaire id_RF est "trouée" (0-15 utilisées, puis 20-35 utilisées...).

    Je souhaiterai, dans une procédure stockée, récupérer la première valeur non utilisée de cette clé.

    La seule solution que je vois pour le moment est une boucle incrémentant une variable et regardant si celle-ci existe en base. Pas très optimisé donc...

    Vous auriez de meilleures idées?

    Merci par avance.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Et en quoi ça dérange la clé primaire qui est "trouée" ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut
    Car ce champ est de type number(3).

    La dernière insertion étant '999', un problème se profile à l'horizon

    J'ai donc 2 solutions, agrandir ce champ ou utiliser les "trous".

    Sauf que ce champ est répliqué dans moultes autres tables. Il est donc plus risqué ( et plus long) de l'agrandir.

    Il me reste donc la solution des "trous".

    Si vous préférez, ce n'est pas la présence des trous qui me gêne (au contraire, pour le coup, heureusement qu'ils sont là) mais le fait d'avoir atteint la limite pour ce champ.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Par défaut
    Bon disons que vous reussissez a faire ce que vous voulez.
    Comment allez vous ensuite inserer les nouvelle PK ? Les performances ne seront certainement pas au RDV : scanner la tables pour les trous puis inserer ... pas tip top.

    Puis une fois inseree , comment allez vous garantir l'integrite des donnees ?
    Disons que vous supprimez un enregistrement dans ta table, puis que vous reutilisez la valeur grace a votre systeme D pour un nouvel enregistrement.
    Etes vous certain que les autres tables qui referencent cette PK comme FK n'ont pas ete corrompu dans l'operation ?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Août 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Août 2010
    Messages : 48
    Par défaut
    Citation Envoyé par Jorafali Voir le message
    Bon disons que vous reussissez a faire ce que vous voulez.
    Comment allez vous ensuite inserer les nouvelle PK ? Les performances ne seront certainement pas au RDV : scanner la tables pour les trous puis inserer ... pas tip top.
    En fait, je ne cherche que le code me remontant la première clé non utilisée, bout de code qui se trouvera dans une procédure stockée faisant plein de chose, entre autre l'insertion dans ma table.
    Pour ce qui est des performances, sur le principe, je suis d'accord avec vous. Il s'agit cependant d'une table de seulement 1000 lignes et cette procédure n'est qu'une parmi une chaîne gigantesque. Donc même si je multiplie par 3 les temps de traitements, la différences ne se verra même pas sur le temps de traitement global de ma chaîne.

    Citation Envoyé par Jorafali Voir le message
    Puis une fois inseree , comment allez vous garantir l'integrite des donnees ?
    Disons que vous supprimez un enregistrement dans ta table, puis que vous reutilisez la valeur grace a votre systeme D pour un nouvel enregistrement.
    Etes vous certain que les autres tables qui referencent cette PK comme FK n'ont pas ete corrompu dans l'operation ?
    Si cette table ne contient plus ma ligne, alors les références à cette ligne dans les autres tables ont été supprimées obligatoirement.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Il y plusieurs façon de faire, exemple les fonctions analytiques (de fenêtrage)
    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
    29
     
    Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
    Connected as mni
     
    SQL> 
    SQL> With Data As (
      2    Select level id
      3      From dual
      4      Connect By level <= 10
      5    Union All
      6    Select level+19
      7      From dual
      8      Connect by level <= 15
      9  )
     10  Select id, id_suivant
     11    From (
     12            Select id, lead(id,1,999) over(order by id) id_suivant
     13              From data
     14         )
     15  Where id !=  id_suivant - 1
     16   order by id
     17  /
     
            ID ID_SUIVANT
    ---------- ----------
            10         20
            34        999
     
    SQL>

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/06/2009, 22h14
  2. Option pour voir les variable non utilisées ?
    Par lex13 dans le forum NetBeans
    Réponses: 13
    Dernier message: 25/08/2007, 12h57
  3. Problème pour récupérer les clés crées
    Par guigui5931 dans le forum JDBC
    Réponses: 2
    Dernier message: 09/05/2007, 13h46
  4. Récupérer les clés primaires "perdues"
    Par Dnx dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/07/2006, 17h13
  5. [javascript] récupérer les "clés" d'un tableau
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 10h13

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