[firebase-br] Problemas com UDF

Fabiano Alex Arndt fabianoallex em pop.com.br
Seg Maio 16 15:56:58 -03 2005


Boa tarde Pessoal,

Estou tendo que criar algumas funções personalizadas para um banco de
dados para simplificar algumas SQLs que estão ficando um pouco
complicadas de se fazer, e achei que solução mais indicada seria
criar algumas UDF, como tenho o banco em linux procurei por uns
exemplos na página da lista e encontrei o seguinte exemplo:

---------------------------
int modulo(int *, int *);

int modulo(a, b)
     int *a;
     int *b;
{
  if (*b == 0)
    return -1; // return something suitably stupid.
  else
    return *a % *b;
}
criei um arquivo .c com o conteudo acima

executei os comandos abaixo:
gcc -c -O -fpic -fwritable-strings <your udf>.c
ld -G <your udf>.o -lm -lc -o <your udflib>.so
cp <your udflib>.so /usr/interbase/udf
No ISQL

e criei a udf no FB.

declare external function f_Modulo
integer, integer
returns
integer by value
entry_point 'modulo' module_name 'name of shared library';
-----------------------------------

fiz quase exatamente como está sendo informado ai em cima,
a unica coisa que não funcionou foi quando executei a seguinte linha:

  ld -G <your udf>.o -lm -lc -o <your udflib>.so

retirei os parametro -lm e -lc, e o arquivo .so foi gerado.
(qual seria a finalidade desses parâmetros?)

mas na hora em que executo uma sql que usa a função que criei
(select f_Modulo(3, 2) from rdb$database;), me é retornado um
erro dizendo que não foi encontrado entry_point ou o module_name
(os nomes de entry_point e module_name estão corretos, ja me certifiquei)

alguém saberia me dizer se está faltando alguma coisa??

obs. uso o FB 1.5.2 e CL10.

Obrigado,
[]'s
Fabiano A. Arndt.







Mais detalhes sobre a lista de discussão lista