Diferencia entre revisiones de «Categoría:DEV FUNCIONES»
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

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:
- Funciones de catálogo (prxfunciones) define la cabecera de la función.
- Funciones, argumentos (prxfuncionesA) define los argumentos de la función.
- 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).
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.