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

De Pragma Wiki
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Línea 28: Línea 28:


=Como cargar los comandos=
=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).
Como ejemplo, usamos una función denominada '''ACTIVAR_ARTICULO''' que tiene un argumento '''FARTICULO: VARCHAR(24)''' representando el código de articulo que queremos activar.


<pre>
<pre>
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'SALDO_ARTICULO') DROP FUNCTION SALDO_ARTICULO
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ACTIVAR_ARTICULO') DROP PROCEDURE ACTIVAR_ARTICULO
GO
GO
CREATE FUNCTION SALDO_ARTICULO
CREATE PROCEDURE ACTIVAR_ARTICULO
(
(
@FARTICULO VARCHAR(24)
@FARTICULO VARCHAR(24)
)
)
RETURNS
NUMERIC(20,2)
AS
AS
BEGIN
BEGIN
Línea 45: Línea 43:
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
   BEGIN
   BEGIN
   SET @FSALDO = (SELECT SUM(ARTMOVTABLA.FCANTIDAD) FROM ARTMOVTABLA WHERE ARTMOVTABLA.FARTICULO = @FARTICULO)
   UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO
   END
   END
RETURN @FSALDO
END
END
GO
GO
</pre>
</pre>


En la tabla [[DEV FUNCIONES]] definimos una función llamada '''SALDO_ARTICULO''' que retorna NUMERIC(20,2).
En la tabla [[DEV PROCEDIMIENTOS]] definimos un procedimiento llamado '''ACTIVAR_ARTICULO'''.


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


Y en el [[DEV FUNCIONES/DETALLE]] definimos:
Y en el [[DEV PROCEDIMIENTOS/DETALLE]] definimos:


<pre>
<pre>
DECLARE @FSALDO NUMERIC(20,2) = 0
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
   BEGIN
   BEGIN
   SET @FSALDO = (SELECT SUM(ARTMOVTABLA.FCANTIDAD) FROM ARTMOVTABLA WHERE ARTMOVTABLA.FARTICULO = @FARTICULO)
   UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO
   END
   END
RETURN FSALDO = @FSALDO
</pre>
</pre>


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


Notar que:
Notar que:
Línea 76: Línea 68:
*Registramos el código entre el primer BEGIN y el último END.  
*Registramos el código entre el primer BEGIN y el último END.  
*No tenemos que incluir el '''GO''' final.
*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).

Revisión del 17:38 28 mar 2025

Introducción

Diagrama de procedimientos.

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:

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 ACTIVAR_ARTICULO que tiene un argumento FARTICULO: VARCHAR(24) representando el código de articulo que queremos activar.

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

IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
   BEGIN
   UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO
   END
END
GO

En la tabla DEV PROCEDIMIENTOS definimos un procedimiento llamado ACTIVAR_ARTICULO.

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

Y en el DEV PROCEDIMIENTOS/DETALLE definimos:

IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO)
   BEGIN
   UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO
   END

Todos los comandos necesarios para crear el procedimiento 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.

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

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