En ocasiones necesitamos tener FOR SELECT anidados. ¿Es eso posible en Firebird?

Sí, ningún problema.

Aquí vemos un ejemplo, este stored procedure no hace algo útil, sirve solamente para mostrar que se pueden anidar los FOR SELECT si los necesitamos anidados.

CREATE PROCEDURE FOR_ANIDADOS
   RETURNS(
      ftnIdenti TYPE OF COLUMN MOVIMCAB.MVC_IDENTI,
      ftnCantid TYPE OF COLUMN MOVIMDET.MOV_CANTID)
AS
   DECLARE VARIABLE lnIdeCab TYPE OF COLUMN MOVIMCAB.MVC_IDENTI;
   DECLARE VARIABLE ldFechax TYPE OF COLUMN MOVIMCAB.MVC_FECHAX;
   DECLARE VARIABLE lcNroDoc TYPE OF COLUMN MOVIMCAB.MVC_NRODOC;
   DECLARE VARIABLE lnIdePrd TYPE OF COLUMN MOVIMDET.MOV_IDENTI;
   DECLARE VARIABLE lnCantid TYPE OF COLUMN MOVIMDET.MOV_CANTID;
BEGIN

   FOR SELECT
      MVC_IDENTI,
      MVC_FECHAX,
      MVC_NRODOC
   FROM
      MOVIMCAB
   INTO
      :lnIdeCab,
      :ldFechax,
      :lcNroDoc
   DO BEGIN
      FOR SELECT
         MOV_IDEPRD,
         MOV_CANTID
      FROM
         MOVIMDET
      WHERE
         MOV_IDECAB = :lnIdeCab
      INTO
         :lnIdePrd,
         :lnCantid
      DO BEGIN
         ftnIdenti = :lnIdeCab;
         ftnCantid = :lnCantid;
         SUSPEND;
      END
   END

END;

Como puedes ver, ningún secreto, aunque por supuesto debes verificar que se cumplan las condiciones del WHERE para que el FOR SELECT arroje algunos resultados. También recuerda que debes incluir el comando SUSPEND en el lugar donde quieres que el stored procedure te devuelva valores. Los valores que devolverá serán los que tienen los parámetros de salida (es decir, los que se encuentran después del RETURNS) en el momento de ejecutarse el SUSPEND.

El autor de este blog utiliza la notación camello y siempre los parámetros de salida empiezan con la letra “f”, significando “Firebird”.

De esa manera es muy fácil saber si una variable es una variable local (porque empieza con “l”), un parámetro de entrada (porque empieza con “t”) o un parámetro de salida (porque empieza con “f”).

 Artículo relacionado:

La notación camello

El índice del blog Firebird 21