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

Administration Firebird Discussion :

Vérifier le nombre de lignes insérées, updatées ou deletées.


Sujet :

Administration Firebird

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut Vérifier le nombre de lignes insérées, updatées ou deletées.
    Bonjour à tous.tes, c'est mouai

    Je me demande s'il n'existerait pas un moyen d'interroger les tables système pour connaître le nombre de lignes insérées, updatées ou deletées après l'exécution d'un ordre SQL, quel qu'il soit.
    Quelqu'un saurait-il m'aiguiller, svp ?

    Je sais interroger les tables système pour récupérer les noms de champs, de tables, clés...
    Mais je me dis qu'il existe peut-être, dans une table, la petite info miracle.

    Merci d'avance

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Peut-être avec la table MON$RECORD_STATS ?
    Mais comment être sûr que ce sont mes requêtes et uniquement elles qui ont fait varier les compteurs ?
    Je me demande s'il n'y a pas une commande pour utiliser les stat, comme dans SQLServer.
    Du genre SET STAT ON , non ?

    Parce que les enreg de la table ne changent pas.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Vous faites toujours la gueule ?
    Si, c'est bon, ça bouge. Je vais essayer de travailler avec ça demain.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par DOliv Voir le message
    Vous faites toujours la gueule ?
    J'imagine que c'était ironique, il y a une vie en dehors de Delphi,Firebird, etc.

    N.B. Il y a certainement des différence entre versions de Firebird donc indiquer la version utilisée n'est pas vraiment optionnel

    Firebird 3 pour moi par "défaut", sur ce poste et ce SQL sachant que coexiste une version Firebird 4

    Je vais essayer de travailler avec ça demain.

    il va falloir en plus utiliser d'autres tables de monitoring et des jointures pour cibler la recherche

    Ici pour une statistique sur le nombre de pages
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT r.MON$STAT_GROUP,r.MON$PAGE_WRITES, r.MON$PAGE_FETCHES, r.MON$PAGE_MARKS,
    I.MON$TRANSACTION_ID,A.MON$ATTACHMENT_NAME,A.MON$USER
    FROM MON$IO_STATS r LEFT JOIN MON$TRANSACTIONS I ON I.MON$STAT_ID=r.MON$STAT_ID
                        LEFT JOIN MON$ATTACHMENTS A ON A.MON$ATTACHMENT_ID=I.MON$ATTACHMENT_ID
    et trouver la bonne clause WHERE ou grouper selon besoin

    donc, un tour sur ce document sera nécessaire
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    J'ai trouvé un truc intéressant pour le monitoring :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select t.MON$TABLE_NAME, r.MON$STAT_ID, r.MON$STAT_GROUP, r.MON$RECORD_SEQ_READS,
        r.MON$RECORD_IDX_READS, r.MON$RECORD_INSERTS, r.MON$RECORD_UPDATES,
        r.MON$RECORD_DELETES, r.MON$RECORD_BACKOUTS, r.MON$RECORD_PURGES,
        r.MON$RECORD_EXPUNGES, r.MON$RECORD_LOCKS, r.MON$RECORD_WAITS,
        r.MON$RECORD_CONFLICTS, r.MON$BACKVERSION_READS, r.MON$FRAGMENT_READS,
        r.MON$RECORD_RPT_READS
    from MON$TABLE_STATS t
    inner join MON$RECORD_STATS r
        on t.MON$STAT_GROUP = r.MON$STAT_GROUP and t.MON$RECORD_STAT_ID = r.MON$STAT_ID
    Mais MON$TABLE_NAME n'existe pas sur mon Firebird

    Quelqu'un connaitrait-il l'alternative à cette very powerful requête ? svp

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par DOliv Voir le message
    Mais MON$TABLE_NAME n'existe pas sur mon Firebird
    il s'agit de la table MON$TABLE_STATS et, je l'avais pourtant bien écrit !
    des différences entre versions de Firebird donc indiquer la version utilisée n'est pas vraiment optionnel
    j'en déduis que cela doit être une version 2.5, de ce fait il y aura aussi d'autres colonnes qui manqueront
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    j'en déduis que cela doit être une version 2.5
    Bonjour Sergio. Si tu le dis
    Où est ce que je peux le voir ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Avec FlameRobin, Server/Retrieve Server Version
    ou en SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') as version from rdb$database;
    Pour en revenir à l'interrogation "nombre de lignes ....", dans un contexte multi-utilisateur, cela va être compliqué puisqu'il va falloir tenir compte des identifiants de transaction
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Rââhhh merci.
    2.5.9
    Ne me dis pas qu'ils ont intégré MON$TABLE_STATS dans la 2.6

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    La 2.5 est une version devenue non maintenue et donc "obsolète", plus de mise à jour
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Avec la version 2.5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT r.MON$STAT_ID, r.MON$STAT_GROUP, r.MON$RECORD_SEQ_READS,
        r.MON$RECORD_IDX_READS, r.MON$RECORD_INSERTS, r.MON$RECORD_UPDATES,
        r.MON$RECORD_DELETES, r.MON$RECORD_BACKOUTS, r.MON$RECORD_PURGES,
        r.MON$RECORD_EXPUNGES,
        a.*,T.*
    FROM MON$RECORD_STATS r JOIN MON$ATTACHMENTS a ON a.MON$STAT_ID=r.MON$STAT_ID
                            JOIN MON$TRANSACTIONS t on t.MON$ATTACHMENT_ID=a.MON$ATTACHMENT_ID
    Reste à définir la clause WHERE grâce aux renseignements des autres tables de monitoring MON$ATTACHMENTS ET MON$TRANSACTIONS ainsi que le bon type de JOINTURE
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Merci Sergio.
    Du coup, j'ai tout ce qu'il me faut pour avancer.
    Bonne journée à toi aussi.

  13. #13
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    J'imagine que c'était ironique, il y a une vie en dehors de Delphi,Firebird, etc.
    J'avais pas tout bien lu ton message, comme d'hab.
    Oui c'était ironique, suite à ma critique des composants FireDac

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonsoir,

    Il est aussi possible de tester la variable du contexte ROW_COUNT.
    Définition dans https://firebirdsql.org/file/documen...reference.html
    Mais ça existait déjà en FB 1.5 donc aussi dans FB 2.5
    The ROW_COUNT context variable contains the number of rows affected by the most recent DML
    statement (INSERT, UPDATE, DELETE, SELECT or FETCH) in the current trigger, stored procedure or
    executable block.

    André

  15. #15
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Merci alanglet. Bien noté. Je jetterai un coup d'oeil.

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Euh oui mais ça ne sert à rien parce que, pour lui, un bloc d'inserts = 1 insert.
    Je fait une boucle de 55 blocs contenant de nombreux inserts, pour la transaction utilisée, MON$RECORD_INSERTS = 55. Et non = nombre de lignes effectivement insérées.

    Je vais voir la solution de alanglet.

  17. #17
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Nope.
    "Currently, the ROW_COUNT variable returns the value 1, even if more than one record is modified or inserted. For details and progress"
    C'est le même soucis.

    C'est quand même fort de café, que la base de donnée ne garde pas quelque part une information sur son état avant une transaction.
    Ce qui devrait permettre d'en déduire son évolution après cette transaction.
    Même si on a aucune idée des tables qui seront affectées par cette transaction, ni du type d'opération que cette transaction a opérée.

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par DOliv Voir le message
    Euh oui mais ça ne sert à rien parce que, pour lui, un bloc d'inserts = 1 insert.
    Je fait une boucle de 55 blocs contenant de nombreux inserts, pour la transaction utilisée, MON$RECORD_INSERTS = 55. Et non = nombre de lignes effectivement insérées.

    Je vais voir la solution de alanglet.
    Ah ben si, ça a l'air de fonctionner. Quelle boulet
    Ad'tal

  19. #19
    Membre du Club
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Avril 2023
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Avril 2023
    Messages : 212
    Points : 68
    Points
    68
    Par défaut
    Presque, mais marche seulement avec et non avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.MON$TRANSACTION_ID = NumTransac
    parce que je n'arrive pas à catcher correctement le numéro de version en live.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT            
    MON$TRANSACTION_ID, 
    MON$RECORD_INSERTS, 
    MON$RECORD_UPDATES, 
    MON$RECORD_DELETES, 
    MON$RECORD_BACKOUTS 
    FROM        
    MON$ATTACHMENTS a JOIN MON$RECORD_STATS r ON a.MON$STAT_ID       = r.MON$STAT_ID      
                      JOIN MON$TRANSACTIONS t ON a.MON$ATTACHMENT_ID = t.MON$ATTACHMENT_ID
    WHERE                       
    t.MON$STATE = 1
    --t.MON$TRANSACTION_ID = NumTransac
    Du coup, j'ai un peu peur que ma requête ne soit pas liée correctement avec la transaction.
    What d'you think ?

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 932
    Points
    40 932
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par DOliv Voir le message
    What d'you think ?
    a) Que je n'ai toujours pas compris le besoin
    b) Qu'il est temps de changer de version de Firebird pour avoir les évolutions du monitoring
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. [MySQL] PDO Afficher le nombre de lignes insérées dans la base
    Par nicoreims dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/01/2016, 13h41
  2. compter le nombre de ligne traitées update
    Par batou22003 dans le forum DB2
    Réponses: 2
    Dernier message: 01/08/2012, 09h34
  3. [Oracle 10g] export datapump : vérifier le nombre de lignes
    Par nico1973 dans le forum Import/Export
    Réponses: 5
    Dernier message: 10/10/2010, 11h53
  4. Récupérer le nombre de lignes impactées : update/delete
    Par romano62880 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 18/05/2010, 20h23
  5. Vérifier le nombres de lignes et colonnes utilisé
    Par derin dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/09/2008, 16h22

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