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 :

[2.1] Comment transformer un UUID ?


Sujet :

Firebird

  1. #1
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut [2.1] Comment transformer un UUID ?
    Bonjour,

    Toujours en v2.1 j'essaie de migrer un GUID servi par une base sdf (compact SQL Server).
    la v2.1 balbutie avec les GUID en proposant GEN_UUID, c'est un début

    J'ai trouvé une FAQ qui propose une PS renvoyant un GUID selon 2 formats. Cette même FAQ conseille le format à utiliser pour le stockage en base.

    Mon souci est que l'outil que j'utilise pour exporter les données de la base SDF (SdfBrowser) fournit, pour le format GUID, une chaine de 36 caractères, donc incompatible avec le CHAR(16) préconisé.

    Il me faut donc une procédure, cependant je ne suis pas inspiré par son contenu . L'idéal serait que cette procédure puisse traiter les 2 formats "étendus" d'un GUID (avec ou sans tiret).
    L'opération inverse (mais sans les tirets) est implicitement présente dans le code de la FAQ.

    Donc, comment à partir d'une valeur hexa (chaque paire de caractères du GUID étendu) obtenir le caractère correspondant?

    Toute aide est la bienvenue.

    Merci par avance.

  2. #2
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut QI130.

    En faisant une recherche sur le net, je découvre que le GUID Structure a une structure de longueur 36 caractères.
    Exemple : "F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4".

    Mais qu'en réalité, la longueur utile est de 32 quartets ou 32 caractères sans les tirets, soit 16 octets.

    J'ai ensuite cherché les fonctions FIREBIRD permetant de manipuler ces GUID.
    J'ai trouvé la fonction UUID_TO_CHAR() qui permet de passer de 16 octets à 36 caractères, ou son inverse, la fonction CHAR()_TO_UUID.

    Tu as précisé que tu étais en FireBird 2.1, et je suppose que ces fonctions n'existent pas avant la version 205.

    Si je reprends l'exemple du GUID ci-dessus, en dehors des tirets, c'est une chaîne hexadécimal.
    --> 0xF9168C5ECEB24FAAB6BF329BF39FA1E4
    que tu peux convertir en chaîne de caractères :
    Code firebird : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    -- ===========================
    -- Création de la table 'test'
    -- ===========================
     
    create table test
    ( id  integer generated by default as identity not null primary key,
      val char(16)                                 not null
    );
     
    -- =====================
    -- Insertion dans 'test'
    -- =====================
     
    insert into test (val) values (x'F9168C5ECEB24FAAB6BF329BF39FA1E4');
     
    insert into test (val) select cast(hex_decode('F9168C5ECEB24FAAB6BF329BF39FA1E4') as char(16)) from RDB$DATABASE;
     
    -- ================
    -- Vidage de 'test'
    -- ================
     
    select * from test;
     
              ID VAL
    ============ ================
               1 ùŒ^βOª¶¿2›óŸ¡ä
               2 ùŒ^βOª¶¿2›óŸ¡ä
     
     
    select id, UUID_TO_CHAR(val) from test;
     
              ID UUID_TO_CHAR
    ============ ====================================
               1 F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4
               2 F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4
     
    exit;
     
    Appuyez sur une touche pour continuer...

    A priori, la conversion fonctionne !

    Cordialement.
    Artemus24.
    @+

  3. #3
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Merci Artémus pour tes propositions, elles sont cependant inopérantes avec ma version 2.17

    Les éléments que tu mentionnes (hex-decode, generated by default as identity ou la notation x'....') ont été introduits en 2.5 d'après ce que j'ai vu.

    C'est bien pour cela que je cherche à faire une procédure.

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 264
    Points : 41 665
    Points
    41 665
    Billets dans le blog
    64
    Par défaut
    Bonjour
    Pourquoi ne pas installer une UDF (bien que pour FB 4 ce soit considéré comme obsolète).
    Deux solutions :


    ou plus spécifique comme celle-ci
    uuidUDF Windows / Linux
    Ian Newby Freeware

    This library contains both the source code and compiled udf library for guid generation. The compiled versions are for Windows or Linux. The Windows dll was compiled using the gcc cross platform compiler. The functions are:

    create_guid() creates a 36 char string guid representation.
    create_uuid() creates a 22 char string guid, which is a compressed form where the order of the sections is reversed to allow firebirds index prefix compression to take place. All the characters used in this uuid are valid characters in urls.
    guid_to_uuid(guid char 36) compresses and reverses a guid to make a uuid.
    uuid_to_guid(uuid char 22) converts a uuid to a guid.
    UUIDUDF

  5. #5
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut à tous.

    @ QI130 : Ne serait-il pas plus judicieux de migrer ton Firebird 2.1.7 vers une version supérieur ?
    C'est la version final de la branche 2.1, qui date du 5 décembre 2014, soit il y a neuf ans.

    Tout ce dont tu as besoin, se trouve à partir de la version 2.5.
    Réinventer ce qui existe déjà par ailleurs, est selon moi une perte de temps.
    D'où tes problèmes de maintenance.

    @ SergioMaster : peut-on créer introduire dans FireBird (même avec la version de QI130), des fonctions écrites en 'C/C++' ? Si oui, comment faire ?

    Cordialement.
    Artemus24.
    @+

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.

    @ QI130 : Ne serait-il pas plus judicieux de migrer ton Firebird 2.1.7 vers une version supérieur ?
    Parfois plus facile à dire qu'à faire...

    Comme on n'est jamais si bien servi que par soi-même, j'ai imaginé cette PS:

    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
    30
    31
    32
    33
    34
    SET TERM ^ ;
    ALTER PROCEDURE PACKGUID (
        INGUID VARCHAR(36) CHARACTER SET ASCII )
    RETURNS (
        OUTGUID CHAR(16) CHARACTER SET OCTETS )
     
    AS
    DECLARE PosHexChar 	int;
    DECLARE LgTot		int;
    DECLARE Guid2Pack	Char(36);
    DECLARE HexChar		Char(2);
    DECLARE LHexChar	Char(1);
    DECLARE RHexChar	Char(1);
    DECLARE DecimalValue	int;
    DECLARE TempResult	CHAR(16) CHARACTER SET OCTETS;
    begin
    	Guid2Pack=TRIM(UPPER(REPLACE(InGuid,'-','')));
    	LgTot=OCTET_LENGTH(Guid2Pack);
    	PosHexChar=1;
    	TempResult='';
    	WHILE (PosHexChar<LgTot) do
    	begin
    		HexChar=SUBSTRING(Guid2Pack FROM PosHexChar FOR 2);
    		LHexChar=LEFT(HexChar,1);
    		RHexChar=RIGHT(HexChar,1);
    		DecimalValue=((POSITION(LHexChar,'0123456789ABCDEF')-1) * 16) + POSITION(RHexChar,'0123456789ABCDEF') - 1;
    		TempResult=TempResult || ASCII_CHAR(DecimalValue);
    		PosHexChar=PosHexChar+2;
    	end
    	OutGuid=TempResult;
            suspend;
    end;
    ^
    SET TERM ; ^
    qui aboutit à Nom : Capture.JPG
Affichages : 148
Taille : 17,5 Ko quand je la sollicite par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from PACKGUID('93c58d80-f77a-4858-ac0a-8d945351d9b6')
    La ligne référencée semble être, déduction faite des lignes vides de mon source d'origine, la ligne #31 (suspend) du code ci-dessus (affectation finale); mais je ne vois pas la cause de l'erreur

  7. #7
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut QI130.

    J'ai trouvé l'origine de ton problème. Il ne faut pas mettre CHAR(16) mais VARCHAR(16) pour le RETURNS. Pourquoi ?
    En CHAR(), la chaine est complétée par des espaces, ce qui fait que tu ne peux pas concaténer sans faire un débordement.
    Tu ne peux pas non plus utiliser le TRIM() car tu risques de supprimer un SPACE (=32) alors que celui est important.
    La seule solution est de passer par le VARCHAR().

    J'ai compacté un peu plus ton code afin de le réduire à sa juste expression :
    Code firebid : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    -- ===========================
    -- Création de la table 'test'
    -- ===========================
     
    create table test
    ( id  integer generated by default as identity not null primary key,
      val char(16)                                 not null
    );
     
    -- ========
    -- Function
    -- ========
     
    SET TERM $ ;
     
    CREATE FUNCTION PACKGUID (Guid CHAR(36) CHARACTER SET NONE)
    RETURNS VARCHAR(16) CHARACTER SET NONE
    AS
    DECLARE Chaine char(16)    DEFAULT '0123456789ABCDEF';
    DECLARE Pos    smallint    DEFAULT 1;
    DECLARE Pack   char(36)    DEFAULT '';
    DECLARE Result varchar(16) DEFAULT '';
     
    BEGIN
            Pack=TRIM(UPPER(REPLACE(Guid,'-','')));
     
            WHILE (Pos<32) do
            BEGIN
                    Result=Result || ASCII_CHAR( ((POSITION(SUBSTRING(:Pack FROM :Pos FOR 1),:Chaine) - 1) * 16) + (POSITION(SUBSTRING(:Pack FROM :Pos+1 FOR 1),:Chaine) - 1) );
                    Pos=:Pos+2;
            END
            RETURN Result;
    END$
     
    SET TERM ; $
     
    -- =====================
    -- Insertion dans 'test'
    -- =====================
     
    insert into Test (val) values (PACKGUID('F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4'));
    insert into Test (val) values (PACKGUID('93c58d80-f77a-4858-ac0a-8d945351d9b6'));
     
    -- ================
    -- Vidage de 'test'
    -- ================
     
    select id, val, UUID_TO_CHAR(val) from Test;
     
              ID VAL              UUID_TO_CHAR
    ============ ================ ====================================
               1 ùŒ^βOª¶¿2›óŸ¡ä F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4
               2 “ō€÷zHX¬
    ”SQÙ¶ 93C58D80-F77A-4858-AC0A-8D945351D9B6
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Comme je suis en FireBird 5.0, pour vérifier la fonction, j'ai ajouté le test à l'aide de la fonction UUID_TO_CHAR().

    Cordialement.
    Artemus24.
    @+

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Salut Artémus,

    je vérifierai ce soir ton approche.

    Je remarque que ton code ne contient pas le suspend qui, a priori, rend la PS selectable. Est-ce lié à ta v2.5? (ou à ma lecture trop rapide de la doc )

    Ceci dit, cette discussion semble affirmer que la valeur en retour est acquise par un simple END.

    RV ce soir pour le verdict !

  9. #9
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut QI130.

    Citation Envoyé par QI130
    je vérifierai ce soir ton approche.
    C'est ton approche, pas la mienne. Je l'ai testé et j'ai fait en sorte quelle fonctionne.

    Citation Envoyé par QI130
    Je remarque que ton code ne contient pas le suspend qui, a priori, rend la PS selectable.
    Ce n'est pas une procédure stockée mais une fonction.

    Cordialement.
    Artemus24.
    @+

  10. #10
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut QI130.
    Ce n'est pas une procédure stockée mais une fonction.
    Oh ! je n'avais pas remarqué... souhaitons que ça marche en 2.1

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut QI130.

    En faisant une recherche sur le net, je découvre que le GUID Structure a une structure de longueur 36 caractères.
    Exemple : "F9168C5E-CEB2-4FAA-B6BF-329BF39FA1E4".

    Mais qu'en réalité, la longueur utile est de 32 quartets ou 32 caractères sans les tirets...

    ...
    Non, un GUID ou UUID est défini par la RFC 4122 et c'est du 128 bits un point c'est tout. Il suffit donc d'un binaire de type BINARY(16) pour le stocker. Pour le représenter vous pouvez opter pour un affichage en mode caractères avec les tirets (représentation la plus commune). Mais attention une chaine de caractères n'a pas les mèmes priorités qu'un binaire dans les comparaisons ! En conclusion tout autre stockage qu'un BINARY(16) est juste une idiotie...

    https://datatracker.ietf.org/doc/html/rfc4122

  12. #12
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut SQLPRO.

    Citation Envoyé par SQLPRO
    Non, un GUID ou UUID est défini par la RFC 4122 et c'est du 128 bits un point c'est tout.
    A bon, parce que 128 bits ne font pas 32 quartets ou 16 octets

    Citation Envoyé par SQLPRO
    En conclusion tout autre stockage qu'un BINARY(16) est juste une idiotie...
    Deux choses :
    --> ce n'est pas mon projet mais celui de QI130.
    --> la version de FireBird qu'il utilise est la 2.1.17, donc très ancienne. Il a des contraintes que je n'ai pas avec la dernière version 5.0 de FireBird.

    Cordialement.
    Artemus24.
    @+

  13. #13
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut des nouvelles du front ^^
    Alors, primo j'ai résolu l'exception lors du SUSPEND
    A grand coup d'inserts dans 1 table externe, j'ai constaté 1 pb à l'utilisation de OCTET_LENGTH qui renvoie:
    • la longueur déclarée pour du CHAR
    • la longueur utilisée pour du VARCHAR

    Du coup, la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHILE (PosHexChar<LgTot)
    était défaillante.

    Maintenant, le problème s'est déporté sur le contenu renvoyé: je récupère en effet le GUID "étendu" débarrassé des tirets . Je précise cependant que ce constat est fait lors d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from PACKGUID('93c58d80-f77a-4858-ac0a-8d945351d9b6')
    sous FlameRobin lequel cherche peut-être à afficher quelque chose d'intelligible au lieu de la "soupe" de caractères?
    De fait, la trace dans la table externe rend correctement compte de la valeur de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASCII_CHAR(DecimalValue)
    .

    L'étape suivante de mon process étant l'insertion en base, peut-être que la valeur correcte sera prise en compte au titre d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable values ( ..,..,.. , select * from PACKGUID('93c58d80-f77a-4858-ac0a-8d945351d9b6'))
    To be continued...

  14. #14
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut Victory !
    Alors, je confirme la volonté de FlameRobin d'être "user friendly" , un autre outil de ma conception me sert correctement la soupe attendue !

    L'étape de mise en base se fait conformément à mon post précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable values ( ..,..,.. , (select OUTGUID from PACKGUID('93c58d80-f77a-4858-ac0a-8d945351d9b6')))
    Notez cependant que le select doit être entre parenthèses.

    Merci de votre intérêt.

  15. #15
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut QI130.

    Heureux pour toi que cela fonctionne.

    Mais pourquoi passer par une procédure stockée alors qu'une fonction fait le même travail ?

    Cordialement.
    Artemus24.
    @+

  16. #16
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 264
    Points : 41 665
    Points
    41 665
    Billets dans le blog
    64
    Par défaut
    On ne m'ôtera pas de l'idée qu'une UDF ferait les choses plus rapidement et facilement, mais puisque c'est résolu…
    J'avais déjà codé un test avec Delphi, il ne me restait plus qu'à faire la/les bibliothèques en fonction de l'OS et du nombre de bits de Firebird.
    Je laisse tomber.

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 538
    Points
    538
    Par défaut
    Bonjour,

    Citation Envoyé par Artemus24 Voir le message
    Mais pourquoi passer par une procédure stockée alors qu'une fonction fait le même travail ?
    Parce que QI130 utilise (encore ?) FB2.1 et que les fonctions stockées ne sont apparues qu'avec FB3, à moins que vous parliez des fonctions UDF?
    L'intérêt des fonctions et procédures stockées par rapport aux UDF, c'est que étant intégrées à la base, nul besoin d'en créer des versions spécifiques à l'OS et l'architecture (32b ou 64b) à installer sur le serveur, et une procédure peut retourner plusieurs variables. D'ailleurs si quelqu'un a fait des tests pour comparer les performances des UDF, UDR et procédures stockées, je suppose que les 2 premières sont plus rapides, mais j'aimerai bien connaître les résultats.

    André

  18. #18
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 264
    Points : 41 665
    Points
    41 665
    Billets dans le blog
    64
    Par défaut
    Citation Envoyé par alanglet Voir le message
    Parce que QI130 utilise (encore ?) FB2.1
    Ce n'est pourtant pas qu'une migration de 2.1 à 2.5 est aussi compliquée que de 2.5 vers 3 ou 4 (la 5 n'étant qu'en beta)

  19. #19
    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 572
    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 572
    Points : 19 739
    Points
    19 739
    Par défaut
    Salut à tous.

    Merci Alanglet, mais je ne savais pas que les fonctions stockées sont apparues dans la version FireBird 3.0.

    Pourrait-on avoir un exemple d'UDF, SVP ?

    Cordialement.
    Artemus24.
    @+

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

Discussions similaires

  1. [Date] Comment transformer mon String en date avec newDate?
    Par Devil666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/06/2005, 17h50
  2. Réponses: 2
    Dernier message: 01/05/2005, 21h37
  3. Réponses: 2
    Dernier message: 14/01/2005, 16h40
  4. XML/XSL vers HTML: comment transformer les linefeed en <B
    Par AlainM dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2003, 13h30
  5. comment transformer un.jpg en .ico
    Par bacca en galère dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 30/10/2003, 14h43

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