SET TERM ^ ;
create or alter procedure ACTUALIZA_CONSECUTIVOS (
TIPO varchar(2),
CLASE varchar(3),
CONSECUTIVO integer)
as
begin
/* Procedure body */
update TIPDOC
set [Link] = :CONSECUTIVO
where CLASE = :CLASE and
TIPO = :TIPO;
end^
SET TERM ; ^
/* Following GRANT statetements are generated automatically */
GRANT SELECT,UPDATE ON TIPDOC TO PROCEDURE ACTUALIZA_CONSECUTIVOS;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE ACTUALIZA_CONSECUTIVOS TO SYSDBA;
Aquí va una breve descripción de lo que hace cada parte:
1. Definición del delimitador:
SET TERM ^ ;
Este comando cambia el delimitador de comandos de SQL de ; a ^. Esto se hace para
poder usar ; dentro del cuerpo del procedimiento almacenado sin que el intérprete de
SQL lo tome como el final del comando.
2. Creación o modificación del procedimiento almacenado:
create or alter procedure ACTUALIZA_CONSECUTIVOS (
TIPO varchar(2),
CLASE varchar(3),
CONSECUTIVO integer)
as
begin
/* Cuerpo del procedimiento */
Esta parte define un procedimiento almacenado llamado ACTUALIZA_CONSECUTIVOS
que toma tres parámetros: TIPO (cadena de 2 caracteres), CLASE (cadena de 3
caracteres) y CONSECUTIVO (entero).
3. Cuerpo del procedimiento:
update TIPDOC
set [Link] = :CONSECUTIVO
where CLASE = :CLASE and
TIPO = :TIPO;
Dentro del cuerpo del procedimiento, se ejecuta una sentencia UPDATE sobre la tabla
TIPDOC. Esta sentencia actualiza el valor de la columna CONSECUTIVO con el valor
proporcionado en el parámetro CONSECUTIVO para las filas donde CLASE y TIPO
coinciden con los valores proporcionados en los parámetros CLASE y TIPO.
4. Fin del procedimiento:
end^
SET TERM ; ^
Estas líneas marcan el final del procedimiento y restauran el delimitador de comandos
SQL a ;.
5. Asignación de privilegios:
GRANT SELECT,UPDATE ON TIPDOC TO PROCEDURE ACTUALIZA_CONSECUTIVOS;
GRANT EXECUTE ON PROCEDURE ACTUALIZA_CONSECUTIVOS TO SYSDBA;
Estas sentencias GRANT otorgan los siguientes privilegios:
Permitir que el procedimiento ACTUALIZA_CONSECUTIVOS pueda seleccionar y
actualizar datos en la tabla TIPDOC.
Permitir que el usuario SYSDBA ejecute el procedimiento
ACTUALIZA_CONSECUTIVOS.
Aquí hay algunos pasos que puedes seguir para verificar si el procedimiento
ACTUALIZA_CONSECUTIVOS está funcionando correctamente:
1. Preparar datos de prueba: Asegúrate de que la tabla TIPDOC contiene algunos
datos de prueba que puedas usar. Por ejemplo, puedes insertar algunas filas con
valores conocidos para TIPO, CLASE y CONSECUTIVO.
INSERT INTO TIPDOC (TIPO, CLASE, CONSECUTIVO) VALUES ('A1', 'B2', 100);
INSERT INTO TIPDOC (TIPO, CLASE, CONSECUTIVO) VALUES ('A2', 'B3', 200);
2. Ejecutar el procedimiento: Llama al procedimiento con diferentes valores de
entrada para verificar si actualiza la tabla como se espera.
EXECUTE PROCEDURE ACTUALIZA_CONSECUTIVOS('A1', 'B2', 150);
3. Verificar los resultados: Consulta la tabla TIPDOC para ver si los valores de
CONSECUTIVO se han actualizado correctamente.
SELECT * FROM TIPDOC WHERE TIPO = 'A1' AND CLASE = 'B2';
El resultado debería mostrar que el campo CONSECUTIVO ha cambiado a 150 para la fila
con TIPO = 'A1' y CLASE = 'B2'.
4. Comprobar otros casos: Repite los pasos anteriores con diferentes
combinaciones de TIPO, CLASE y CONSECUTIVO para asegurarte de que el
procedimiento funcione en todas las situaciones esperadas.
5. Revisar mensajes de error: Si el procedimiento no funciona como esperas,
revisa los mensajes de error que puedan aparecer y asegúrate de que los datos de
entrada son correctos.
Probar procedimientos almacenados en SQL de manera efectiva es esencial para
garantizar que funcionen correctamente y sean seguros. Aquí te dejo algunas mejores
prácticas para probar procedimientos en SQL:
1. Preparar Datos de Prueba:
o Crea un conjunto de datos de prueba que cubran todos los casos posibles,
incluidos los casos extremos y los valores nulos.
o Asegúrate de que los datos de prueba sean representativos de los datos
reales que el procedimiento manejará.
2. Uso de Transacciones:
o Realiza pruebas dentro de transacciones para que puedas deshacer los
cambios una vez que hayas terminado de probar. Esto ayuda a mantener la
base de datos en un estado limpio.
o Ejemplo:
BEGIN TRANSACTION;
EXECUTE PROCEDURE nombre_procedimiento(params);
ROLLBACK TRANSACTION;
3. Pruebas Unitarias:
o Escribe pruebas unitarias para cada procedimiento almacenado. Utiliza
frameworks de prueba específicos para bases de datos, como tSQLt para SQL
Server.
o Las pruebas unitarias deben verificar los resultados esperados y también
asegurar que los procedimientos manejen correctamente los errores.
4. Validación de Resultados:
o Después de ejecutar el procedimiento, verifica que los datos en la tabla se
hayan actualizado correctamente.
o Usa sentencias SELECT para comprobar los resultados y comparar con los
valores esperados.
5. Manejo de Errores:
o Asegúrate de que el procedimiento maneje adecuadamente los errores y
excepciones. Incluye bloques TRY...CATCH o equivalentes para gestionar
errores.
o Prueba el procedimiento con datos que puedan causar errores para verificar
que se manejen adecuadamente.
6. Pruebas de Rendimiento:
o Evalúa el rendimiento del procedimiento, especialmente si se espera que
maneje grandes volúmenes de datos.
o Mide el tiempo de ejecución y optimiza las consultas y el uso de índices si es
necesario.
7. Documentación y Comentarios:
o Documenta claramente el propósito y el funcionamiento del procedimiento
almacenado.
o Incluye comentarios en el código para explicar partes complejas o críticas del
procedimiento.
8. Revisión por Pares:
o Realiza revisiones de código con tus compañeros de equipo para identificar
posibles mejoras y detectar errores que puedas haber pasado por alto.
9. Pruebas en Entorno de Staging:
o Siempre que sea posible, prueba el procedimiento en un entorno de staging
que sea similar al entorno de producción. Esto ayuda a identificar problemas
que podrían no aparecer en un entorno de desarrollo.
Aplicar estas mejores prácticas te ayudará a asegurar que tus procedimientos
almacenados sean confiables, eficientes y fáciles de mantener.