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

Oracle Discussion :

[PL/SQL] Trouver un emplacement libre!


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut [PL/SQL] Trouver un emplacement libre!
    Bonjour,

    Voila dans une tables j'ai des enregistrements avec des codes un peu aléatoire, par exemple: 9001,9003,10560, etc...

    Et donc j'aime savoir si il existe une fonction pour pouvoir trouver le premier emplacement libre, c'est à dire: j'ai 100,101,103,104,105, etc... je voudrais pouvoir savoir que le chiffre 102 n'est pas utilisé!

    Merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    SELECT min(t1.col1) + 1
    FROM TATABLE t1
    WHERE NOT EXISTS (SELECT 1 FROM TATABLE t2
    WHERE t2.col1 = t1.col1 + 1)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Merci McM pour ta réponse

    Mais je n'ai qu'une seul table alors que ton code compare avec une deuxieme table.

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Qu'est-ce qui t'empêche de le faire la clause exists sur la même table ?

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    t1 et t2 sont des alias. TATABLE c'est la même table

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    je suis lourd des fois moi...

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tant que tu comprend et que tu reposes pas la même question plus tard, tout va bien.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Bon alors ça marche du tonnerre! On peut pas faire mieux, mais.... sur du number et moi ils ont eu la bonne idée de mettre ça en varchar2, donc ça me retourne une erreur comme quoi se n'est pas un nombre valide.
    J'ai essayé de bidouiller avec un TO_NUMBER() mais il ne veut rien savoir!

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour vérifier que tu n'as que des nombres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select col1, length(col1)
    from tatable
    where length(ltrim(col1, '0123456789')) > 0

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Je ne suis pas sur de comprendre, mais à quoi cela me sert de vérifié que je n'ai que des nombres?

    Dans la table je n'ai que des nombres, mais écrit en varchar2.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Bon et bien c'est bon ça marche.
    Le problème c'était les parenthèse!!!
    Voici donc le code qui va bien avec du varchar2


    SELECT (min(t1.col1) + 1)
    FROM MATABLE t1
    WHERE NOT EXISTS (SELECT 1 FROM MATABLE t2
    WHERE t2.col1 = (t1.col1 + 1))
    Merci McM

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Outch!!!

    12sec de recherche pour 2700 entrée!!!

  13. #13
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 23
    Points : 6
    Points
    6
    Par défaut
    Pour optimiser un chouillat, as-tu positionné un index sur ta colonne "col1" ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Optimisation, Optimisation:

    SELECT valeur FROM (SELECT (t1.col1 +1) valeur
    FROM MATABLE t1
    ORDER BY t1.col1 DESC)
    WHERE rownum=1;
    Execution: 0,015sec!

    Le nain Attila> Oui il y a un index.

  15. #15
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est bien d'optimiser, mais faut que ça fasse ce que tu veux !!
    Là ça marche plus
    Si tu as les données 1,2,3,5
    Ca te ramène 6 et pas 4 !!

    C'est exactement comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT max(col1) +1 
    FROM MATABLE

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 101
    Points : 38
    Points
    38
    Par défaut
    Mince McM, t'es trop rapide, je viend de testé toute mes entrée quand je me suit aperçut que effectivement mon truc correspondé à un max(t1.col1)

  17. #17
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    A mon avis l'index n'est pas pris à cause des conversions implicites...

    M'enfin avec 2700 enregistrements cela ne devrait pas être si lent

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

Discussions similaires

  1. Trouver un emplacement libre
    Par lechewal dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/05/2006, 13h41
  2. Réponses: 8
    Dernier message: 08/06/2004, 02h29
  3. Réponses: 8
    Dernier message: 05/05/2004, 13h30
  4. Trouver l'emplacement de la machine virtuelle java
    Par aymron dans le forum Windows
    Réponses: 2
    Dernier message: 30/03/2004, 13h11
  5. [VB6] [Winsock] Trouver un port libre
    Par Yann dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/10/2002, 12h23

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