Categoría:DEV FUNCIONES
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:
- La tabla Funciones de catálogo (prxfunciones) define la cabecera de la función.
- La tabla Funciones, argumentos (prxfuncionesA) define los argumentos de la función.
- La tabla Funciones, detalle (prxfuncionesD) define el código de la función.
Como armar la función
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.
Este ejemplo aplica a funciones que se crean en la base de datos (tienen el campo AplicaEnServdor marcado) o aquellas que solo se usan dentro de los procedimientos del sistema (tienen el campo AplicaEnServidor desmarcado).
Páginas en la categoría «DEV FUNCIONES»
Las siguientes 3 páginas pertenecen a esta categoría, de un total de 3.