Un stored procedure que retorna una cantidad variable de valores

Deja un comentario

Un stored procedure puede devolver cero valores, un valor, o muchos valores.

La forma más sencilla de hacer que nos devuelva solamente algunos valores, no todos, es llamarlo mediante un SELECT.

O sea que nuestro stored procedure deberá ser seleccionable.

Lo cual se consigue poniendo la instrucción SUSPEND dentro de él.

Entonces, si nuestro stored procedure devuelve los valores ftnValor1, ftnValor2, ftnValor3, ftnValor4 y solamente nos interesa obtener ftnValor1 y ftnValor3, escribiríamos algo como:

SELECT
   ftnValor1,
   ftnValor3
FROM
   MiStoredProcedureSeleccionable
WHERE
   MiCondición

Artículos relacionados:

Entendiendo a los stored procedures

¿Por qué usar stored procedures?

Usando un stored procedure como una función

Escribiendo un stored procedure

Enviando y recibiendo una cantidad variable de parámetros en los stored procedures

El índice del blog Firebird21

El foro del blog Firebird21

 

 

 

 

Anuncios

Usando subconsultas en expresiones

1 comentario

Antes de la versión 2.5 del Firebird no se podían usar subconsultas en expresiones aunque dichas subconsultas retornaran un solo valor. Esto nos obligaba a usar la construcción SELECT … INTO

Ahora, estas asignaciones ya son posibles dentro de un stored procedure, un trigger o un execute block:

MiVar = (SELECT … FROM …);

IF ((SELECT … FROM …) = 1) THEN …

IF(25 = ANY(SELECT … FROM …)) THEN …

IF(2104 IN (SELECT … FROM …)) THEN …

Por supuesto que en los dos primeros ejemplos el SELECT debe retornar una sola fila.

lcNomCli = (SELECT CLI_NOMBRE FROM CLIENTES WHERE CLI_IDENTI = 11111);     /* Nombre del cliente */

lnPreVta = (SELECT PRD_PREVTA FROM PRODUCTOS WHERE PRD_IDENTI = 12345);     /* Precio de venta del producto */

Fíjate que debes rodear al SELECT con paréntesis o recibirás un mensaje de error.