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

Firebird Discussion :

DECIMAL(18,0) ou INTEGER dans un trigger.


Sujet :

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 DECIMAL(18,0) ou INTEGER dans un trigger.
    Bonjour à tous.tes,
    Je vois systématiquement une zone tmp déclarée en DECIMAL(18,0) dans les triggers "before insert" des tables qui servent à lancer un générateur qui crée un ID.
    Y a t-il une raison particulière pour que cette zone ne soit pas déclarée en INTEGER ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    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 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Le DECIMAL(18,0), trigger généré très certainement via Flamerobin, c'est effectivement un peu daté en fait depuis le fork INTERBASE, depuis FB 1.5 il existe BIGINT
    S'il devait y avoir un changement plutôt que INTEGER ce serait BIGINT (-263 à 263 - 1) ou INT128 (-2127 à 2127 -1)

    voir le tableau 3.3.1 Method of Physical Storage for Real Numbers

    Maintenant cela dépend donc de la version de Firebird et du SQL Dialect de la base (1 ou 3), le DIALECT 1 ne connait pas BIGINT
    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

  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
    Merci SergioMaster. Il s'agit bien de FlameRobin que je découvre.
    Merci beaucoup pour l'explication et la doc.
    Mais je n'arrive pas à trouver combien d'octet il réserve pour un INTEGER.

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    La bonne question est pourquoi ce choix. Decimal(18,0) permet de stocker 18 chiffres.
    Comparativement, un integer qui est stocké sur quatre octets (32 bits) permet de stocker un nombre allant de -2 147 483 648 jusqu'à +2 147 483 647.
    Dans une représentation non signé, il va de 0 jusqu'à +4 294 967 295.
    Cela ne fait que 10 chiffes au maximum.

    Dans le type bigint, cela va de -9 223 372 036 854 775 808 jusqu'à +9 223 372 036 854 775 807, soit 19 chiffres.
    De même, si le nombre n'est pas signé, cela va de 0 jusqu'à +18 446 744 073 709 551 615, soit 20 chiffres.

    Citation Envoyé par DOliv
    Y a t-il une raison particulière pour que cette zone ne soit pas déclarée en INTEGER ?
    Je pense qu'au moment où ce choix a été fait, c'était le type numérique où l'on pouvait stocker la plus grande valeur.

    Habituellement sous MySql, on utilise le type "integer unsigned" pour l'identifiant 'id'.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/10/2004, 16h18
  2. Recuperer derniere valeur modifiée dans un trigger
    Par xabs dans le forum Développement
    Réponses: 2
    Dernier message: 06/08/2004, 16h22
  3. RAZ GENERATOR dans un trigger
    Par kase74 dans le forum SQL
    Réponses: 2
    Dernier message: 08/09/2003, 18h43
  4. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  5. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51

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