[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