Categoría:DEV PROCEDIMIENTOS
Introducción

Los procedimientos (ver Procedimientos) son similares a las funciones definidas en el catálogo, pero no retornan un resultado.
A diferencia de las funciones definidas en el catálogo, los procedimientos siempre se crean en la base de datos.
Tablas
Para definir un procedimiento necesitamos:
- La tabla Procedimientos de catálogo (prxprocedimientos) permite definir la cabecera del procedimiento.
- La tabla Procedimientos, argumentos (prxprocedimientosA) permite definir los argumentos del procedimiento.
- La tabla Procedimientos, detalle (prxprocedimientosD) permite definir los comandos SQL que forman el cuerpo del procedimiento.
Acceso a los argumentos desde el SQL del procedimiento
Para acceder a los valores ingresados en los argumentos desde el SQL del procedimiento tenemos que hacer lo descripto en este título.
Asumiendo que tenemos un argumento llamado Articulo de tipo VARCHAR el SQL (definido en DEV PROCEDIMIENTOS/DETALLE) accede a su valor agregando un @ como Prefijo al nombre del argumento.
Por ejemplo:
IF EXISTS (SELECT * FROM ART WHERE FCODIGO = @Articulo) BEGIN . . . END
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.
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 PROCEDIMIENTOS»
Las siguientes 3 páginas pertenecen a esta categoría, de un total de 3.