Pi() függvény Firebirdben

Pi() függvény Firebirdben
2008-05-12T18:06:16+02:00
2008-05-13T21:17:26+02:00
2022-11-09T13:30:45+01:00
udin
Sziasztok!

Firebird adatbázisban hogyan érhetem el a Pi() függvényt?
D7-ből Zeos Queryvel kapcsolódok Fb 2.0-hoz, a selectben szeretném használni, az eredmény "function unknown Pi". Pedig a Fb referenciában benne van.
Mutasd a teljes hozzászólást!
2.1-től van benne.
Mutasd a teljes hozzászólást!

  • Köszi, ezt nem találtam, hogy melyik verzióra vonatkozik.
    Ezek szerint a trunc() és round() is? Volt egyáltalán valami benne a 2.1 előtt?
    Mutasd a teljes hozzászólást!
  • Kicsit "bogarászhatnál"... A
    firebird
    katalógusában van ám egy
    UDF
    könyvtár is, amelyen belül egy
    ib_udf.sql
    (is). Nos azzal lehetne valamit csinálni!
    Mutasd a teljes hozzászólást!
  • Nos azzal lehetne valamit csinálni!

    Bizonyára. És ha elárulod azt is, hogy "bogarászás" után mi legyen a "valami", amit csinálhatnék vele, akkor azzal segítenél is. Ennyiből nem sokra jutottam.
    Mutasd a teljes hozzászólást!
  • Hali!

    Valóban jól mondja old sharky, az UDF könyvtárban ott van egy ib_udf.dll, amiben benne van a PI függvény. Ott van hozzá a szükséges SQL szkript is, amivel ezeket az UDF-eket deklarálni kell. De ami Neked kell, az

    DECLARE EXTERNAL FUNCTION pi RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_pi' MODULE_NAME 'ib_udf';

    Ez létrehozza a kívánt függvényt, majd

    SELECT PI FROM RDB$DATABASE; vagy SELECT PI FROM BARMELY_TABLA; /* csak a masodik esetben ugye annyiszor adja vissza, ahany rekord van a tablaban */

    formátumban tesztelheted is.

    Üdv:Alex
    Mutasd a teljes hozzászólást!
  • Sajnos nem jövök rá, hogy mit kéne tenni vele.
    Természetesen megtaláltam a deklarációt, és deklarált függvényeket tudok használni. De mit tegyek a kettő között?
    Tudnátok egy kicsit részletezni?
    Köszi.
    Mutasd a teljes hozzászólást!
  • Szia!

    Mivel az ib_udf.dll eleve ott van az FBRoot/udf/ könyvtárban, ezért a dolgod mindössze annyi, hogy a mellékelt szkriptet le kell futtatni valahol, ahol tudsz DSQL-t végrehajtani. Erre még az isql.exe is jó, de azért inkább egy normális admin-ból futtasd (HK Soft-os IBExpert, EMS IBManager, etc), ahol azért grafikusan is látod, hogy létrejött a kérdéses UDF. Utána pedig a szokásos módon használhatod.

    Üdv: Alex
    Mutasd a teljes hozzászólást!
  • De mit tegyek a kettő között?


    Igazából lehet, hogy le kellene írnod, hogy milyen lépéseket is teszel, mert az egész "pofon egyszerű".

    1. kapcsolódni kell a kérdéses adatbázishoz, amelyben a PI() függvényt használni kívánod
    2. ebben az adatbázisban a fentiekben már leírt módon, sql utasítással "bevezeted" (az adatbázis "élete során" csak egyetlen egyszer kell!), hogy a szükséges külső UDF függvényt használni lehessen - ez leginkább olyan, mint amikor a Delphi-ben pl. statikusan adod meg egy külső, DLL-ben megvalósított függvény definícióját
    3. már használhatod is pl.:

    SELECT cast(PI() as numeric(18,16)) as pi_const FROM RDB$DATABASE;

    eredmény:

    3,1415926535897936

    ui.: Amennyiben beágyazott FB-öt használsz valószínűsíthető, hogy a szükséges UDF-es DLL-eket is "szállítani" kell!
    Mutasd a teljes hozzászólást!
  • Nagyon köszönöm mindkettőtöknek, és szégyellem, hogy ennyire nem vagyok képben. Sajnos nem is sikerült ezt így megoldani, lehet, hogy tényleg pofon egyszerű, és én képzelek valami bonyolultabbat mögé.
    A sikertelen próbálkozások után inkább feltettem a Fb 2.1-et, így egyszerűbb volt, és egyből lett pi() is, meg round() is.
    Mutasd a teljes hozzászólást!
  • Igazán szívesen!
    Sajnos én sem lettem okosabb, mert továbbra sincs fogalmam arról, hogy miért nem sikerült egy UDF függvényt használatra "bírnod". Bár mindentől függetlenül a FB 2.1 jó választás!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd