Diferencia entre revisiones de «Categoría:DEV FUNCIONES»

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Sin resumen de edición
Línea 13: Línea 13:
*[[DEV FUNCIONES/ARGUMENTOS|Funciones, argumentos (prxfuncionesA)]] define los argumentos de la función.
*[[DEV FUNCIONES/ARGUMENTOS|Funciones, argumentos (prxfuncionesA)]] define los argumentos de la función.
*[[DEV FUNCIONES/DETALLE|Funciones, detalle (prxfuncionesD)]] define el código de la función.
*[[DEV FUNCIONES/DETALLE|Funciones, detalle (prxfuncionesD)]] define el código de la función.
=Como cargar los comandos=
Como ejemplo, usamos una función denominada '''SALDO_ARTICULO''' que tiene un argumento '''FARTICULO: VARCHAR(24)''' representando el código de articulo cuyo stock queremos averiguar, el stock se retorna en un NUMERIC(20,2).
<pre>
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'SALDO_ARTICULO') DROP FUNCTION SALDO_ARTICULO
GO
CREATE FUNCTION SALDO_ARTICULO
(
@FARTICULO VARCHAR(24)
)
RETURNS
NUMERIC(20,2)
AS
BEGIN
DECLARE @FSALDO NUMERIC(20,2) = 0
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
  BEGIN
  SET @FSALDO = (SELECT SUM(ARTMOVTABLA.FCANTIDAD) FROM ARTMOVTABLA WHERE ARTMOVTABLA.FARTICULO = @FARTICULO)
  END
RETURN @FSALDO
END
GO
</pre>
En la tabla [[DEV FUNCIONES]] definimos una función llamada '''SALDO_ARTICULO''' que retorna NUMERIC(20,2).
En la tabla [[DEV FUNCIONES/ARGUMENTOS]] definimos un solo argumento denominado '''FARTICULO''' de tipo '''VARCHAR(24)'''.
Y en el [[DEV FUNCIONES/DETALLE]] definimos:
<pre>
DECLARE @FSALDO NUMERIC(20,2) = 0
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
  BEGIN
  SET @FSALDO = (SELECT SUM(ARTMOVTABLA.FCANTIDAD) FROM ARTMOVTABLA WHERE ARTMOVTABLA.FARTICULO = @FARTICULO)
  END
RETURN FSALDO = @FSALDO
</pre>
Todos los comandos necesarios para crear la función correctamente los agrega el sistema.
Notar que:
*No tenemos que incluir el '''CREATE'''.
*Registramos el código entre el primer BEGIN y el último END.
*No tenemos que incluir el '''GO''' final.
Respecto del valor de retorno:
*En los comandos usados para crear la función en la base de datos usamos '''RETURN @FSALDO'''.
*En cambio, al cargar los comandos tenemos que usar '''RETURN FSALDO = @FSALDO''', anteponiendo un nombre de campo al valor retornado.

Revisión del 17:05 28 mar 2025

Introducción

Diagrama de funciones.

Las funciones (ver Funciones) realizan un cálculo sobre un conjunto de valores recibido como argumentos y devuelven un valor único. Hay distintos tipos de funciones en SQL SERVER.

Las funciones del catálogo pueden ser creadas en la base de datos o no:

  • Si se crean en la BD pueden ser usadas en cualquier código de la aplicación.
  • Si no se crean en la base de datos solo pueden ser usadas en algún proceso como el de liquidación de haberes (esto no está documentado).

Tablas

Las tablas necesarias son:

Como cargar los comandos

Como ejemplo, usamos una función denominada SALDO_ARTICULO que tiene un argumento FARTICULO: VARCHAR(24) representando el código de articulo cuyo stock queremos averiguar, el stock se retorna en un NUMERIC(20,2).

IF EXISTS (SELECT * FROM sys.objects WHERE name = 'SALDO_ARTICULO') DROP FUNCTION SALDO_ARTICULO
GO
CREATE FUNCTION SALDO_ARTICULO
(
@FARTICULO VARCHAR(24)
)
RETURNS
NUMERIC(20,2)
AS
BEGIN
DECLARE @FSALDO NUMERIC(20,2) = 0

IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
   BEGIN
   SET @FSALDO = (SELECT SUM(ARTMOVTABLA.FCANTIDAD) FROM ARTMOVTABLA WHERE ARTMOVTABLA.FARTICULO = @FARTICULO)
   END

RETURN @FSALDO
END
GO

En la tabla DEV FUNCIONES definimos una función llamada SALDO_ARTICULO que retorna NUMERIC(20,2).

En la tabla DEV FUNCIONES/ARGUMENTOS definimos un solo argumento denominado FARTICULO de tipo VARCHAR(24).

Y en el DEV FUNCIONES/DETALLE definimos:

DECLARE @FSALDO NUMERIC(20,2) = 0

IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
   BEGIN
   SET @FSALDO = (SELECT SUM(ARTMOVTABLA.FCANTIDAD) FROM ARTMOVTABLA WHERE ARTMOVTABLA.FARTICULO = @FARTICULO)
   END

RETURN FSALDO = @FSALDO

Todos los comandos necesarios para crear la función correctamente los agrega el sistema.

Notar que:

  • No tenemos que incluir el CREATE.
  • Registramos el código entre el primer BEGIN y el último END.
  • No tenemos que incluir el GO final.

Respecto del valor de retorno:

  • En los comandos usados para crear la función en la base de datos usamos RETURN @FSALDO.
  • En cambio, al cargar los comandos tenemos que usar RETURN FSALDO = @FSALDO, anteponiendo un nombre de campo al valor retornado.

Páginas en la categoría «DEV FUNCIONES»

Las siguientes 3 páginas pertenecen a esta categoría, de un total de 3.