Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Uso de SUSPEND; Solo cuando el SP devuelve valores (https://www.clubdelphi.com/foros/showthread.php?t=32132)

Paoti 26-05-2006 22:23:36

Uso de SUSPEND; Solo cuando el SP devuelve valores
 
¡Hola! compañeros.



Tengo una grandisima duda, que no he tenido tiempo de hacer pruebas, por andar con otros motores de bases de datos :(



Quisiera preguntarles esto.

Que solamente lo he usado en pruebas de escritorio el uso de SP desde Firebird por repetición sin saber el porque.


¿La Sentencia SUSPEND que uso tiene en un Stored Procedure?.
¿Indica un COMMIT?
¿Que se haga una pausa en el servidor de DB para que se actualize algo?
¿Tiene que ir al final del Procedimiento Almacenado o antes de una sentencia que aborta el Procedimiento Almacenado?

o como dice este link: (Que aparte es muy bueno "COMO CREAR UN PROCEDIMIENTO ALMACENADO")
si es un procedure que no devuelve nada solo ejecuta o sea no tiene suspend
http://clubdelphi.com/foros/showthre...spend+firebird.



Gracias por su apoyo.


SELECT "MUCHAS GRACIAS" FROM DUAL;

Héctor Randolph 27-05-2006 07:16:57

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.


La franja horaria es GMT +2. Ahora son las 00:46:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi