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 :

Récupérer dernier enregistrement inséré


Sujet :

Langage SQL

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut Récupérer dernier enregistrement inséré
    Bonjour,

    J'ai fait une requête INSERT et là je cherche à récupérer le dernier id insérer dans ma table. J'ai utilisé LAST mais sa ne fonctionne pas sous oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                SELECT LAST(id) FROM maTable;
    Merci de votre aide

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    De manière générale, il n'est pas possible de sortir le dernier enregistrement d'une table sauf si vous avez une colonne notifiant l'heure de l'enregistrement...

    si ce n'est pas le cas, vous n'avez qu'a imaginez votre table comme un sac de bille dans lequel je rajoute une bille que vous ne voyez pas et je vous demande de la retrouver.

  3. #3
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    A tester (en fonction du SGBD) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select top 1 Id from Matable order by Id desc

  4. #4
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    WHAT !!!


    C'est complètement absurde comme requête...
    Si j'insère l'id 2 puis l'id 1, ca me sortira le 2 qui n'est pas le dernier inséré.

    Ce cas ne depend absolument pas du SGBD, toutes les bases, même MySQL sortiront ce résultat.

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    J'ai fais cette requête là, je sais pas vraiment si c'est correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id FROM MATABLE
                WHERE ROWID=(SELECT MAX(ROWID) FROM MATABLE);

  6. #6
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Ce n'est pas correct non plus.
    Si vous supprimez un enregistrement, vous allez laisser un trou dans votre rowid qui sera comblé par le prochain insert, et donc n'aura pas le rowid max.

    Si vous n'avez pas une colonne enregistrant l'insertion de la ligne, ca ne sert à rien de chercher, vous ne pourrez pas récupéré la dernière ligne insérée.

  7. #7
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je comprend pas vraiment ce que tu dis car là, par exemple, mon dernier enregistrement est 22, si je le supprime et que après j'en rajoute un, il aura l'id 23. C'est un id auto-incrémenté

  9. #9
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Citation Envoyé par bstevy Voir le message
    WHAT !!!
    C'est complètement absurde comme requête...

    Citation Envoyé par totot Voir le message
    C'est un id auto-incrémenté
    Donc ...

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Donc je ne comprend pas pourquoi la requete que je propose ne va pas

  11. #11
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Bin, dans ce cas, effectivement, ca marche...
    donc utilise la requete de pc75, en remplacant ID par * et tu auras ta ligne. (pour un peu que ta base accepte cette syntaxe, la fonction de "top" n'étant pas implémenté de la même facon sur tous les sgbd... oracle utilise rownum)

    ou alors la requete que tu proposes est très bien aussi pour ce cas

    Mais attention, ca ne marchera pas forcément sur une autre table...

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    Je suis sous Oracle pour info
    Et pourquoi ma requête ne marcherait pas forcément sur une autre table

  13. #13
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    L'auto incrémente d'une variable ID n'est pas implémenté de base sur les tables.
    Il s'agit souvent d'un trigger qui, à l'insertion d'une ligne, insère au passage un ID auto incrémenté.

    Mais pour que ce soit mis en place, il faut que la personne qui a créé la table l'ai précisé.

    De ce fait, si tu crées toi même une table quelconque sans rien préciser, ni ajouté de trigger, tu te retrouveras dans un cas où tu ne pourras pas récupéré ta dernière ligne.
    Et donc, les autres tables de ta base sont peut-etre dans ce cas, à savoir qu'elles n'ont pas forcément toute un auto incrément.

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Points : 132
    Points
    132
    Par défaut
    D'accord,

    Merci bien pour toutes ses informations

  15. #15
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par bstevy Voir le message
    L'auto incrémente d'une variable ID n'est pas implémenté de base sur les tables.
    Il s'agit souvent d'un trigger qui, à l'insertion d'une ligne, insère au passage un ID auto incrémenté.

    Mais pour que ce soit mis en place, il faut que la personne qui a créé la table l'ai précisé.

    De ce fait, si tu crées toi même une table quelconque sans rien préciser, ni ajouté de trigger, tu te retrouveras dans un cas où tu ne pourras pas récupéré ta dernière ligne.
    Et donc, les autres tables de ta base sont peut-etre dans ce cas, à savoir qu'elles n'ont pas forcément toute un auto incrément.
    il ne faut pas oublier les identity colonnes, qui elles sont bien incrémentées (ou décrémentées au choix) automatiquement, auquel cas on peut retrouver la dernière insertion, même après un delete.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GENERATED ALWAYS AS IDENTITY
    Sauf que : il peut y avoir eu d'autres personnes qui ont fait d'autres actions sur la base dans l'intervalle

  16. #16
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par totot Voir le message
    Donc je ne comprend pas pourquoi la requete que je propose ne va pas
    Parce que tout système d'auto incrément peut être forcé....

    Donc si tu supprime la ligne d'id 23 qui était la dernière, rien n'empêche une insertion de la ligne -89562341 en forçant la valeur de l'auto incrément.

    Cette demande fait partie des pires bêtises que l'on trouve hélas régulièrement sur Internet !

    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/ * * * * *

  17. #17
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    il ne faut pas oublier les identity colonnes, qui elles sont bien incrémentées (ou décrémentées au choix) automatiquement, auquel cas on peut retrouver la dernière insertion, même après un delete.
    NON, NON et NON !!!!

    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/ * * * * *

  18. #18
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Même sans aller aussi loin :

    User 1 : insert into... => id 30
    User 2 : insert into... => id 31
    User 2 : commit;
    User 1 : commit;

    Le dernier id inséré est le 30.
    Le max est le 31.

  19. #19
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Même sans aller aussi loin :

    User 1 : insert into... => id 30
    User 2 : insert into... => id 31
    User 2 : commit;
    User 1 : commit;

    Le dernier id inséré est le 30.
    Le max est le 31.

    Oui, mais ça c'est du Oracle... Du fait du non autocommit... Déjà qu'ils ont pas compris l'auto incrément, alors si tu y ajoute les transactions... on a pas fini le troll !

    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/ * * * * *

  20. #20
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Enfin parler de transaction en autocommit... Effectivement on a pas fini le troll !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Récupérer le dernier enregistrement inséré
    Par jockerse dans le forum SQLite
    Réponses: 5
    Dernier message: 03/04/2014, 19h52
  2. Récupérer le dernier enregistrement inséré dans une table
    Par pierre24 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/10/2008, 11h45
  3. Réponses: 5
    Dernier message: 29/12/2005, 07h03
  4. Réponses: 5
    Dernier message: 01/02/2005, 17h29
  5. Récupérer dernier enregistrement d'une table?
    Par Invité dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/01/2004, 11h38

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