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

Bases de données Delphi Discussion :

Firebird 2.5 et "fonction"


Sujet :

Bases de données Delphi

  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut Firebird 2.5 et "fonction"
    Bonjour

    En SQL Server, je peux définir une fonction que j'appelle comme suit :

    SELECT NCLI(NOGII)

    En Firebird, je suis obligé de faire :

    SELECT
    (SELECT CLIN FROM NCLI(pers.PERS_NOGII)) as NumCop

    C'est pénible.

    Il n'y a vraiment pas moyen de faire autrement ?

  2. #2
    Rédacteur/Modérateur

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

    la question me semble plus juste à poser sur le forum Firebird même si c'est certainement moi qui vais par la suite y répondre
    mais plutôt que de transférer le sujet (j'ai la flemme) je vais essayer de répondre ici

    je crois que par "fonction" Firebird tu veux parler de 1-procédure ou de 2-UDF ? voici 2 syntaxe qui fonctionnent
    1- SELECT CLIN AS NumCop FROM NCLI(NOGII)
    ou SELECT CLIN NumCop FROM NCLI(NOGII)

    2- SELECT NCLI(NOGII) FROM RDB$DATABASE

    je suis obligé de faire
    SELECT
    (SELECT CLIN FROM NCLI(pers.PERS_NOGII)) as NumCop
    comme je n'ai pas le SQL complet cela me parait bizarre, ne serait-ce que parce que le pers.PERS_NOGII suggère une suite dans le SQL.

    de toute façon s'il s'agissait d'une fonction UDF il n'y aurait pas besoin de ce double select ce qui laisse supposer qu'il s'agit d'une procédure (auquel cas une jointure est une autre solution)
    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 émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    arf, j'ai pris "base de données" un peu trop rapidement, je l'admets.

    En fait, il y a un peu partout dans des requêtes intégrées dans les DFM, un truc comme suit:

    substring(monchamp 9 for 5) || '_' || substring(monchamp 16 for 3)

    Problème, la longueur de monchamp a évolué pour passer de 18 à 20 (char), ce qui m'a obligé à modifier de partout (avec risque d'erreur évidemment) à

    substring(monchamp 11 for 5) || '_' || substring(monchamp 18 for 3)

    Comme j'imagine que ça risque d'évoluer encore, je voulais faire une fonction qui me renvoie directement le résultat en passant le champ en paramètre.
    Sur SQL Server, ça roule seul.
    Je viens de voir que Firebird 3 sait le faire aussi maintenant mais je suis en 2.5 et je vais pas changer pour le moment.

    ma procédure est écrite et fonctionne bien mais je suis obligé de passer par ce que j'ai écrit:

    select
    ...,
    ...,
    (select valeur from mafonction(monchamp)) as Numero,
    ...,


    etc...

    et je trouve ça lourdingue, surtout que dans certains cas "group by" ça ne fonctionne pas.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Dans ce cas (firebird 2.5) c'est plutôt une UDF (user defined function) dans une DLL qu'il te faudrait
    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

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