Ver Mensaje Individual
  #2  
Antiguo 27-05-2006
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Reputación: 20
Héctor Randolph Va por buen camino
Hola Paoti

Primero que nada te diré que en Firebird/Interbase existen dos tipos de procedimientos:
  • Procedimientos ejecutables .- Son llamados directamente por una aplicación mediante la sentencia EXECUTE PROCEDURE. Pueden ser utilizados para realizar una serie de tareas.
  • Procedimientos select .- Pueden ser tratados de forma similar a una tabla o vista en una sentencia SELECT. Devuelven un conjunto de valores contenidos en uno o más renglones.

Para responder a tu pregunta te pongo un ejemplo de los procedimientos tipo select.

Código SQL [-]
CREATE PROCEDURE get_emp_proj2 (v_empno SMALLINT)
  RETURNS (line_no integer, _project_id CHAR(5))
AS
BEGIN
  line_no = 0;
  FOR SELECT proj_id
     FROM Employee_project
     WHERE emp_no = :v_ empno
    INTO :_project_id
  DO
  BEGIN
    line_no = line_no+1;
    SUSPEND;
  END
END

Para llamarlo se usa una sentencia como esta:

Código SQL [-]
  SELECT * FROM get_emp_proj2(71);

Resultado

LINE_NO PROJECT_ID
=========== ==========
            1 VBASE
            2 MAPDB

Como puedes observar el uso de la sentencia FOR SELECT...DO dentro del procedimiento permite que su comportamiento sea similar a una tabla al llamarlo con la sentencia SELECT.

Por otra parte, la sentencia SUSPEND detiene la execución del procedimiento para devolver los valores, es decir, cuando quieres enviar todo un renglón a la aplicación que lo ha llamado.

Puedes hacer una serie de operaciones con las variables y cuando hayas obtenido el resultado que deseas entonces utilizas SUSPEND para devolver el resultado, observa en el ejemplo la variable line_no, una vez que se ha calculado se envia el resultado con SUSPEND.

Espero que sea útil, saludos.

Última edición por Héctor Randolph fecha: 27-05-2006 a las 07:20:18.
Responder Con Cita