Ir al contenido


Foto

Firebird ¿cómo crear funciones?


  • Por favor identifícate para responder
3 respuestas en este tema

#1 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 17 abril 2014 - 10:56

Pues ya he hecho mis procedimientos almacenados, ahora me surge la necesidad de una función. En otros motores es con create function y en seguida el código PLSQL, me encontré que hay una parte que se llama UDF pero según veo es para programas externos. ¿Cómo creo funciones en firebird que sean solo PLSQL?
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 18 abril 2014 - 09:48

Esta es quizá la parte mas "aburridora" de Firebird. Primero que todo hay que desarrollar una DLL (en Delphi o en cualquier lenguaje) que exporte las funciones deseadas, supongamos que creamos una DLL de nombre "Test_DLL" que exporta la función "Test_Function" que recibe como parámetro una cadena de texto y devuelve otra, entonces en Firebird creamos la función "FIREBIRD_TEST_FUNCTION" del siguiente modo:



delphi
  1. declare external function FIREBIRD_TEST_FUNCTION
  2. cstring(255)
  3. returns cstring(255) free_it
  4. entry_point 'Test_Function' module_name 'Test_DLL;



Dicha DLL debería residir en la carpeta de instalación de Firebird.

Personalmente evito hasta donde sea posible el uso de las  UDF y en su defecto uso procedimientos almacenados para tal fin.

Si deseas puedes decirnos que quieres lograr con la función y con mucho gusto miramos si se puede lograr con un SP.

Saludos.

PD: Firebird tiene un buen arsenal de funciones listas para usar. Aquí hay una pequeña muestra.
  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 21 abril 2014 - 09:10

Hola.

Yo utilizo procedimientos almacenados como funciones.

Ejplo.: creamos una función/procedimiento almacenado para formatear números, poniendo ceros delante.



delphi
  1. SET TERM ^ ;
  2.  
  3. CREATE procedure "Format" (
  4.     NUM integer)
  5. returns (
  6.     RESULT varchar(20))
  7. as
  8. begin
  9.   RESULT = 10000000000 + NUM;
  10.   RESULT = substring(RESULT from 2 for 10);
  11.   suspend;
  12. end
  13. ^
  14.  
  15. SET TERM ; ^



Ahora ya solo queda utilizar esta pseudo-función, y como se ha escrito como un procedimiento almacenado, se tiene que utilizar en forma de subconsulta.

Ejemplo dentro de una consulta :



delphi
  1. select CODIGO,
  2.       (select RESULT from "Format"(CODIGO)) as CODIGO_FORMATEADO,
  3.       NOMBRE
  4. from CLIENTES



  • 0

#4 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 21 abril 2014 - 10:19

Hola amigo Marc,

Fijate que precisamente debido a que las UDF en firebird como comenta el amigo wilson son para usarse con DLLS decidí usar un procedimiento almacenado con muy buenos resultados.

Gracias por los comentarios.
  • 0




IP.Board spam blocked by CleanTalk.