¡El poder de los datos!

1

¡El poder de los datos!

Fundamentos de Bases de Datos

2

Sistema de Gestión de Bases de Datos

3

¿Qué es una base de datos?

4

¿Qué es SQL?

5

Los comandos SQL más importantes

6

Operaciones básicas en SQL

7

Modelo Entidad Relación (ER)

8

Normalización

Introducción a las bases de datos relacionales

9

Tipos de datos en SQL

10

¿Cómo crear una base de datos en SQL?

11

Buenas practicas de bases de datos con SQL

12

Práctica: Tu primera consulta en bases de datos

Manipulación de Datos

13

Insertando Datos con SQL (INSERT)

14

Práctica: Creación de Tablas en SQL (CREATE TABLE)

15

Consultas y Selecciones en SQL (SELECT)

16

Práctica: SELECT en SQL

17

Eliminación de Datos con SQL (DELETE)

18

Actualización de Datos con SQL (UPDATE)

19

Práctica: CRUD con SQL

Manipulación Avanzada de Datos

20

🛠️ Guía de instalación de MySQL y MySQL Workbench

21

¿Qué es la cláusula WHERE de SQL?

22

Filtrar y Ordenar Datos en SQL (LIKE)

23

Cláusulas de Comparación Textual en SQL (AND, NULL, IN, NOT)

24

Funciones de Aritmética Básica en SQL (COUNT)

25

Funciones de Aritmética Básica en SQL (MIN, MAX)

Agrupación de Datos

26

Agrupación de Datos en SQL: GROUP BY, HAVING y CASE para Análisis Avanzado

27

Tipos de JOIN en SQL

28

¿Cómo funciona INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN?

Transformación de Datos

29

Vistas Materializadas en SQL: Como optimizar tus consultas y reportes.

30

Vistas Materializadas y Temporales en SQL

31

Expresiones de Tablas Comunes (CTE) en SQL

Procedimientos Almacenados

32

Procedimientos Almacenados en SQL

33

Procedimientos Almacenados en SQL: Gestión de Variables y Manejo de Excepciones

Administración de Base de Datos

34

Respaldos y Restauración de Bases de Datos

Análisis de Datos Avanzados

35

Potenciando los Datos en la Nube: Data Science, Big Data, ML e AI

36

SQL para Análisis de Datos: Primeros pasos con Power BI

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Procedimientos Almacenados en SQL: Gestión de Variables y Manejo de Excepciones

33/36
Recursos

¿Cómo crear procedimientos almacenados con parámetros de entrada y salida?

El manejo de procederes almacenados en bases de datos como MySQL es crucial para optimizar transacciones complejas y asegurar la integridad de los datos. Aprender a utilizarlos eficazmente, incluyendo la interacción con parámetros de entrada y salida, puede mejorar significativamente tu competencia en el uso de bases de datos. En este instructivo, exploraremos un escenario práctico donde se emplean ambos tipos de parámetros, construyendo sobre la base de los procedimientos previamente almacenados. Al finalizar, tendrás una comprensión sólida de cómo gestionar transacciones y manejar excepciones.

¿Qué son los parámetros de entrada y salida?

En un procedimiento almacenado, los parámetros de entrada permiten pasar información a la operación. Utilizamos la palabra reservada IN para definirlos, seguido por el nombre del parámetro y su tipo de dato. Por otro lado, los parámetros de salida, definidos con OUT, sirven para devolver datos después de completar el procedimiento. Ambos tipos de parámetros comparten una estructura similar, diferenciándose solo por la palabra clave inicial.

¿Cómo influye el uso de variables y manejo de excepciones?

Las variables actúan como contenedores para resultados intermedios o finales dentro del procedimiento almacenado. Es importante no confundir parámetros y variables, pues en MySQL las variables se declaran con la palabra clave DECLARE. En nuestro ejemplo, se utilizará una variable para almacenar el resultado del promedio de salario. Además, el manejo de excepciones es vital para cancelar transacciones ante errores, evitando inconsistencias en tus datos. Se utiliza ROLLBACK para revertir la transacción fallida, junto con el uso de SELECT para mostrar mensajes de error informativos al usuario.

¿Cuál es el proceso para crear un procedimiento almacenado?

  1. Definición de Parámetros y Variables:

    • Parámetros de entrada (primer nombre, apellido, departamento, salario, fecha).
    • Parámetro de salida (resultado promedio).
    • Declaración de la variable para almacenar el resultado del promedio.
  2. Iniciación de la Transacción:

    • Comenzar la transacción con BEGIN.
    • Iniciar la declaración de operaciones que incluye, en este ejemplo, INSERT INTO y una consulta de promedio de salario.
  3. Manejo de Excepciones:

    • Utilizar SELECT para definir el mensaje de error usando AS para etiquetarlo.
    • Establecer ROLLBACK para revertir operaciones en caso de error.
  4. Concluir Transacción Exitosa:

    • Asignar el resultado del cálculo de promedio a la variable usando el símbolo =.
    • Confirmar la conclusión exitosa de la transacción con COMMIT.
    • Finalizar el procedimiento con END.

Ejemplo de sintaxis en MySQL

CREATE PROCEDURE CalcularPromedioSalario (
    IN nombre VARCHAR(100),
    IN apellido VARCHAR(100),
    IN departamento VARCHAR(100),
    IN salario DECIMAL(10,2),
    IN fecha DATE,
    OUT promedio DECIMAL(10,2)
)
BEGIN
    DECLARE resultadoPromedio DECIMAL(10,2);

    START TRANSACTION;

    BEGIN
        -- Insertar nueva entrada en la tabla empleados
        INSERT INTO empleados (nombre, apellido, departamento, salario, fecha)
        VALUES (nombre, apellido, departamento, salario, fecha);

        -- Calcular el promedio de salarios
        SELECT AVG(salario) INTO resultadoPromedio FROM empleados;

        -- Asignar el promedio calculado al parámetro de salida
        SET promedio = resultadoPromedio;

        COMMIT;
    EXCEPTION
        BEGIN
            -- Mensaje de error y rollback si algo falla
            SELECT 'Error: no se pudo completar la operación.' AS mensajeError;
            ROLLBACK;
        END;
    END;
    END;

Este ejemplo ilustra un procedimiento almacenado que inserta datos y calcula un promedio. En caso de error, el rollback garantiza que no se realicen cambios parciales en los datos.

El compromiso con el aprendizaje de estas herramientas te habilitará para manejar transacciones complejas con confianza y eficiencia. Te animamos a experimentar y crear tus propios procedimientos, incrementando así tu conocimiento y habilidades en gestión de bases de datos. Si tienes preguntas o deseas contribuir al desarrollo de estas prácticas, ¡compártelo en los comentarios!

Aportes 17

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

el curso paso de un nivel muy básico a un nivel muy avanzado de una manera muy brusca y me parece que quedaron muchos temas en el aire
Tengo TODAS LAS DUDAS! jajajaja
En todo lugar te darán bases, depende de tí profundizar.
![](https://static.platzi.com/media/user_upload/image-f2aa7224-4063-4e46-8d84-27800e4ef9c1.jpg)
Para los que les queda dudas les recomiendo ver este curso de harvard> <https://cs50.harvard.edu/sql/2024/>
Aquí me perdi totalmente :(
uyy no me parece solamente hable y hable debieron haber colocado un ejemplo con paso a paso para los que no tenemos ni idea no me gusto este curso
![](https://static.platzi.com/media/user_upload/35186569662b9ac5cf89a2be43f611d298bab884_00-fc2f45b9-5771-4f9f-975e-17b58bb65f9e.jpg)![]()
<https://platzi.com/cursos/fundamentos-db/> voy a dar un paso a tras y me pasare por este curso antes, despues les cuento si me va mejor
Hubiera sido que explicara el proceso un poco más por bloques con la tableta, así como cuando explicó en las clases de Join, algo más gráfico en estos casos que ya se vuelve un poco más complejo.
La clase se centra en la creación de procedimientos almacenados en SQL, abarcando el manejo de variables y excepciones. Se explica cómo definir parámetros de entrada y salida, y se destaca la diferencia entre parámetros y variables. Se aprende a manejar errores mediante excepciones, utilizando la sentencia `ROLLBACK` para deshacer transacciones en caso de fallos. Además, se muestra cómo interactuar con tablas mientras se modifican registros y se calcula el promedio de salarios. Se invita a los estudiantes a practicar creando sus propios procedimientos almacenados.
![](https://static.platzi.com/media/user_upload/3.%20Procedimientos%20almacenados-d8890184-af1a-468f-845d-e35113ff8982.jpg)
Esto NO funciona con SQLite!
Esta clase tiene un incremento significativo en la complejidad de los temas tratados hasta ahora; sin embargo, creo que entendí el concepto. Falta practicar mucho para interiorizar el funcionamiento.
```python -- COMMENT Second PROCEDURE -- DELIMITER // CREATE PROCEDURE AddEmployeeAndUpdateAvaraSalary( IN p_FIRST_NAME VARCHAR(50), IN p_LAST_NAME VARCHAR(50), IN p_DEPARTMENT_ID INT, IN p_SALARY DECIMAL(10, 2), IN p_HIRE_DATE DATE, OUT p_AVG_SALARY DECIMAL(10, 2) ) BEGIN DECLARE v_AVG_SALARY DECIMAL(10, 2); DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SELECT 'Error Occured: the operation has not been completed' AS ErrorMESSAGE; ROLLBACK; END; START TRANSACTION; INSERT INTO EMPLOYEES (FIRST_NAME, LAST_NAME, DEPARTMENT_ID, SALARY, HIRE_DATE) VALUES (p_FIRST_NAME, p_LAST_NAME, p_DEPARTMENT_ID, p_SALARY, p_HIRE_DATE); -- calculate the average salary for the department SELECT AVG(SALARY) INTO v_AVG_SALARY FROM EMPLOYEES WHERE DEPARTMENT_ID = p_DEPARTMENT_ID; -- Set the output parameter SET p_AVG_SALARY = v_AVG_SALARY; COMMIT; END // DELIMITER ; ```
![](https://static.platzi.com/media/user_upload/image-07ddf789-b872-4c94-88b8-f9c87eb01abb.jpg) ```txt DELIMITER $$ CREATE PROCEDURE AddEmployeeAndUpdateAverageSalary( IN P_FirstName VARCHAR(50), IN P_LastName VARCHAR(50), IN P_DepartmentID INT, IN P_Salary FLOAT, IN P_HireDate DATE, OUT p_NewAverageSalary FLOAT ) BEGIN DECLARE v_AvgSalary FLOAT; DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN -- Manejo de la excepción: Mostrar un mensaje de error SELECT 'Error: No se pudo completar la operación' AS ErrorMessage; ROLLBACK; -- Deshacer todos los cambios realizados durante la transacción END; START TRANSACTION; -- Inicia una transacción, todas las operaciones siguientes se consideran una transacción -- Insertar el nuevo empleado INSERT INTO employees (FirstName, LastName, DepartmentID, Salary, HireDate) VALUES (P_FirstName, P_LastName, P_DepartmentID, P_Salary, P_HireDate); -- Calcular el nuevo promedio del departamento SELECT AVG(Salary) INTO v_AvgSalary FROM employees WHERE DepartmentID = P_DepartmentID; -- Asignar el salario promedio calculado a la variable de salida SET p_NewAverageSalary = v_AvgSalary; COMMIT; -- Confirma la transacción actual y guarda todos lo cambios realizados END $$ DELIMITER ; CALL AddEmployeeAndUpdateAverageSalary('Juan', 'Rubio', 3, 36000, '2021-04-8', @NewAvgSalary); SELECT @NewAvgSalary; -- Para ver el nuevo salario promedio SELECT * FROM employees; ```
![](https://static.platzi.com/media/user_upload/image-746fa5d4-d38e-4ffd-9146-4fab088d6642.jpg) ![](https://static.platzi.com/media/user_upload/image-3f8eaa6b-81e7-4614-9c8c-c170d0f8bf9f.jpg) ![](https://static.platzi.com/media/user_upload/image-91f3eb44-6a9c-4758-bea6-1d9a5f967416.jpg)asi me salio a mi espero les ayude