Diferencia entre revisiones de «Categoría:DEV PROCEDIMIENTOS»
(Página creada con «=Introducción= Category:MANUAL/DESARROLLADOR miniaturadeimagen|izquierda|Diagrama de procedimientos.») |
|||
(No se muestran 8 ediciones intermedias del mismo usuario) | |||
Línea 2: | Línea 2: | ||
[[Category:MANUAL/DESARROLLADOR]] | [[Category:MANUAL/DESARROLLADOR]] | ||
[[Archivo:20250318 1605 prxprocedimientos.png|miniaturadeimagen|izquierda|Diagrama de procedimientos.]] | [[Archivo:20250318 1605 prxprocedimientos.png|miniaturadeimagen|izquierda|Diagrama de procedimientos.]] | ||
Los procedimientos (ver [https://learn.microsoft.com/es-es/sql/relational-databases/stored-procedures/stored-procedures-database-engine?view=sql-server-ver16 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 [[DEV PROCEDIMIENTOS|Procedimientos de catálogo (prxprocedimientos)]] permite definir la cabecera del procedimiento. | |||
*La tabla [[DEV PROCEDIMIENTOS/ARGUMENTOS|Procedimientos, argumentos (prxprocedimientosA)]] permite definir los argumentos del procedimiento. | |||
*La tabla [[DEV PROCEDIMIENTOS/DETALLE|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: | |||
<pre> | |||
IF EXISTS (SELECT * FROM ART WHERE FCODIGO = @Articulo) | |||
BEGIN | |||
. | |||
. | |||
. | |||
END | |||
</pre> | |||
=Como armar el procedimiento= | |||
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> | |||
IF EXISTS (SELECT * FROM sys.objects WHERE name = 'ACTIVAR_ARTICULO') DROP PROCEDURE ACTIVAR_ARTICULO | |||
GO | |||
CREATE PROCEDURE ACTIVAR_ARTICULO | |||
( | |||
@FARTICULO VARCHAR(24) | |||
) | |||
AS | |||
BEGIN | |||
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO) | |||
BEGIN | |||
UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO | |||
END | |||
END | |||
GO | |||
</pre> | |||
Armamos el procedimiento: | |||
*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 [[DEV PROCEDIMIENTOS/DETALLE]] definimos: | |||
<pre> | |||
IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO) | |||
BEGIN | |||
UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO | |||
END | |||
</pre> | |||
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. |
Revisión actual - 15:56 31 mar 2025
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 armar el procedimiento
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 IF EXISTS (SELECT * FROM ART WHERE ART.FCODIGO = @FARTICULO) BEGIN UPDATE ART SET FACTIVO = 1 WHERE ART.FCODIGO = @FARTICULO END END GO
Armamos el procedimiento:
- 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 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.