procedimientos insert

procedimiento 1

DELIMITER //
CREATE PROCEDURE insertAlmacenV(
IN `n_ubicacion` VARCHAR(50),
IN `n_C_caja` VARCHAR(50),
IN `n_codarchivista` INT(11)
)
BEGIN
DECLARE UserExistente INT;
SELECT COUNT(*) INTO UserExistente
FROM tblalmacenes
WHERE ubicacion = n_ubicacion;
IF UserExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El almacen ya existe';
ELSE
INSERT INTO tblalmacenes (ubicacion, C_cajas, codarchivista)
VALUES (n_ubicacion, n_C_cajas, n_codarchivista);
END IF;
END //

procedimiento 2

DELIMITER $$
CREATE PROCEDURE `insertArchivistasV` (
IN `n_dirrecion` VARCHAR(50),
IN `n_correo` VARCHAR(50),
IN `n_telefono` VARCHAR(50),
IN `n_estado` VARCHAR(50),
IN `n_codhospital` INT(11)
)
BEGIN
DECLARE ArchivistaExistente INT;
SELECT COUNT(*) INTO ArchivistaExistente
FROM tblarchivistas
WHERE correo = n_correo;
IF ArchivistaExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El archivista ya existe';
ELSE
INSERT INTO tblarchivistas (dirrecion, correo, telefono, estado, codhospital, cedula_archivista)
VALUES (n_dirrecion, n_correo, n_telefono, n_estado, n_codhospital, n_cedula_archivista);
END IF;
END$$

procedimiento 3

DELIMITER$$
CREATE PROCEDURE `insertArchivosV` (
IN `n_ubicacion` VARCHAR(40),
IN `n_tipo_archivo` VARCHAR(40),
IN `n_F_creacion` DATE,
IN `n_F_modificacion` DATE,
IN `n_estado` VARCHAR(40),
IN `n_codcaja` INT(11)
)
BEGIN
DECLARE ArchivoExistente INT;

SELECT COUNT(*) INTO ArchivoExistente
FROM tblarchivos
WHERE ubicacion = n_ubicacion OR tipo_archivo = n_tipo_archivo;

IF ArchivoExistente > 0 THEN
IF ArchivoExistente = 1 THEN
IF EXISTS (SELECT 1 FROM tblarchivos WHERE ubicacion = n_ubicacion) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'La ubicación ya existe';
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El tipo de archivo ya existe';
END IF;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'La ubicación y el tipo de archivo ya existen';
END IF;
ELSE
INSERT INTO tblarchivos (ubicacion, tipo_archivo, F_creacion, F_modificacion, estado, codcaja)
VALUES (n_ubicacion, n_tipo_archivo, n_F_creacion, n_F_modificacion, n_estado, n_codcaja);
END IF;
END$$

procedimiento 4

DELIMITER$$
CREATE PROCEDURE `insertBodegasV` (
IN `n_ubicacion` VARCHAR(40),
IN `n_cantidad_material` INT(11),
IN `n_codarchivista` INT(11)
)
BEGIN
DECLARE BodegaExistente INT;

SELECT COUNT(*) INTO BodegaExistente
FROM tblbodegas
WHERE ubicacion = n_ubicacion;

IF BodegaExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'La ubicación ya existe en la tabla tblbodegas';
ELSE
INSERT INTO tblbodegas (ubicacion, cantidad_material, codarchivista)
VALUES (n_ubicacion, n_cantidad_material, n_codarchivista);
END IF;
END$$

procedimiento 5

DELIMITER$$
CREATE PROCEDURE `insertCiudadesV` (
IN `p_nombre` VARCHAR(50),
IN `p_coddepartamento` INT(11)
)
BEGIN
DECLARE ciudadExistente INT;

SELECT COUNT(*) INTO ciudadExistente
FROM tblciudades
WHERE nombre = p_nombre;

IF ciudadExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'La ciudad ya existe';
ELSE
INSERT INTO tblciudades (nombre, coddepartamento)
VALUES (p_nombre, p_coddepartamento);
END IF;
END$$

procedimiento 6

DELIMITER$$
CREATE PROCEDURE `insertUsersV` (
IN `n_cedula` VARCHAR(50),
IN `n_fechaExp` DATE,
IN `n_sexo` VARCHAR(50),
IN `n_nombre` VARCHAR(50),
IN `n_hist_medico` VARCHAR(50),
IN `n_tratamiento` VARCHAR(50),
IN `n_tipo_sangre` VARCHAR(50),
IN `n_lugar_nacimiento` VARCHAR(50),
IN `n_estatura` VARCHAR(50),
IN `n_telefono` VARCHAR(50),
IN `n_codhospital` INT(11)
)
BEGIN
DECLARE UserExistente INT;

SELECT COUNT(*) INTO UserExistente
FROM tblcclientes
WHERE cedula = n_cedula;

IF UserExistente > 0 THEN

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El cliente ya existe';
ELSE
INSERT INTO tblclientes (cedula, fechaExp, sexo, nombre, hist_medico, tratamiento, tipo_sangre, lugar_nacimiento, estatura, telefono, codhospital)
VALUES (n_cedula, n_fechaExp, n_sexo, n_nombre, n_hist_medico, n_tratamiento, n_tipo_sangre, n_lugar_nacimiento, n_estatura, n_telefono, n_codhospital);
END IF;
END$$

procedimiento 7

DELIMITER$$
CREATE PROCEDURE `insertDepartamentosV` (
IN `p_nombre` VARCHAR(50)
)
BEGIN
DECLARE departamentoExistente INT;

SELECT COUNT(*) INTO departamentoExistente
FROM tbldepartamentos
WHERE nombre = p_nombre;

IF departamentoExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El departamento ya existe';
ELSE
INSERT INTO tbldepartamentos (nombre)
VALUES (p_nombre);
END IF;
END$$

procedimiento 8

DELIMITER$$
CREATE PROCEDURE `insertHorariosV` (
IN `n_Fecha` DATE,
IN `n_Hora` TIME
)
BEGIN
DECLARE HorarioExistente INT;

SELECT COUNT(*) INTO HorarioExistente
FROM tblhorarios
WHERE Fecha = n_Fecha AND Hora = n_Hora;

IF HorarioExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'La Fecha y Hora ya existen';
ELSE
INSERT INTO tblhorarios (Fecha, Hora)
VALUES (n_Fecha, n_Hora);
END IF;
END$$

procedimiento 9

DELIMITER$$
CREATE PROCEDURE `insertHospitalesV` (
IN `p_nombre` VARCHAR(50),
IN `p_telefono` INT(11),
IN `p_codciudad` INT(11)
)
BEGIN
DECLARE hospitalExistente INT;

SELECT COUNT(*) INTO hospitalExistente
FROM tblhospitales
WHERE nombre = p_nombre;

IF hospitalExistente > 0 THEN

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El hospital ya existe';
ELSE
INSERT INTO tblhospitales (nombre, telefono, codciudad)
VALUES (p_nombre, p_telefono, p_codciudad);
END IF;
END$$

procedimiento 10

DELIMITER$$
CREATE PROCEDURE `insertMaterialesV` (
IN `p_carpeta` INT(11),
IN `p_pc` INT(1),
IN `p_papel` INT(11),
IN `p_sticker` INT(11),
IN `p_codbodega` INT(11)
)
BEGIN
DECLARE materialExistente INT;

SELECT COUNT(*) INTO materialExistente
FROM tblmateriales
WHERE codbodega = p_codbodega;

IF materialExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El material con el código de bodega ya existe';
ELSE
INSERT INTO tblmateriales (carpeta, pc, papel, sticker, codbodega)
VALUES (p_carpeta, p_pc, p_papel, p_sticker, p_codbodega);
END IF;
END$$

procedimiento 11

DELIMITER$$
CREATE PROCEDURE `insertSupervisoresV` (
IN `p_nombre` VARCHAR(40),
IN `p_apellido` VARCHAR(40),
IN `p_correo` VARCHAR(40),
IN `p_Telefono` VARCHAR(40),
IN `p_Experiencia` VARCHAR(40),
IN `p_codhorario` INT(11)
)
BEGIN
DECLARE supervisorExistente INT;

SELECT COUNT(*) INTO supervisorExistente
FROM tblsupervisores
WHERE correo = p_correo;

IF supervisorExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El supervisor con el mismo correo electrónico ya existe';
ELSE
INSERT INTO tblsupervisores (nombre, apellido, correo, Telefono, Experiencia, codhorario)
VALUES (p_nombre, p_apellido, p_correo, p_Telefono, p_Experiencia, p_codhorario);
END IF;
END$$

procedimiento 12

DELIMITER$$
CREATE PROCEDURE `insertTrabajadoresV` (
IN `p_cargo` VARCHAR(50),
IN `p_conocimiento` VARCHAR(50),
IN `p_telefono` INT(11),
IN `p_codhospital` INT(11),
IN `p_codsupervisor` INT(11)
)
BEGIN
DECLARE trabajadorExistente INT;

SELECT COUNT(*) INTO trabajadorExistente
FROM tbltrabajadores
WHERE telefono = p_telefono;

IF trabajadorExistente > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El trabajador con el mismo número de teléfono ya existe';
ELSE
INSERT INTO tbltrabajadores (cargo, conocimiento, telefono, codhospital, codsupervisor)
VALUES (p_cargo, p_conocimiento, p_telefono, p_codhospital, p_codsupervisor);
END IF;
END$$

procedimientos consultas

procedimiento 1

info porcedimiento

Este procedimiento devuelve una lista de clientes y sus respectivos hospitales. Los parámetros de entrada son p_nombre_cliente y p_nombre_hospital, que se utilizan para filtrar los resultados por nombre de cliente y nombre de hospital, respectivamente. El procedimiento devuelve dos columnas: nombre (el nombre del cliente) y hospital_nombre (el nombre del hospital asociado al cliente).

procedimiento

DELIMITER //
CREATE PROCEDURE sp_get_clientes_hospitales(
IN p_nombre_cliente VARCHAR(50),
IN p_nombre_hospital VARCHAR(50)
)
BEGIN
SELECT c.nombre, h.nombre AS hospital_nombre
FROM tblclientes c
JOIN tblhospitales h ON c.codhospital = h.codhospital
WHERE c.nombre LIKE CONCAT('%', p_nombre_cliente, '%')
AND h.nombre LIKE CONCAT('%', p_nombre_hospital, '%');
END//
DELIMITER ;

call del procedimiento

CALL sp_get_clientes_hospitales();

procedimiento 2

info porcedimiento

este procedimiento permite buscar supervisores que coinciden con ciertos criterios de nombre, apellido, fecha, hora, hospital y departamento, y devuelve su información junto con sus horarios correspondientes.

procedimiento

DELIMITER //
CREATE PROCEDURE sp_obtener_supervisores_horarios(
IN p_nombre VARCHAR(40),
IN p_apellido VARCHAR(40),
IN p_fecha DATE,
IN p_hora TIME,
IN p_codhospital INT(11),
IN p_coddepartamento INT(11)
)
BEGIN
SELECT s.nombre, s.apellido, h.Fecha, h.Hora
FROM tblsupervisores s
JOIN tblhorarios h ON s.codhorario = h.codhorario
WHERE s.nombre LIKE CONCAT('%', p_nombre, '%')
AND s.apellido LIKE CONCAT('%', p_apellido, '%')
AND h.Fecha = p_fecha
AND h.Hora = p_hora
AND s.codhospital = p_codhospital
AND h.codhorario IN (
SELECT codhorario
FROM tblhorarios
WHERE coddepartamento = p_coddepartamento
);
END//
DELIMITER ;

call del procedimiento

CALL sp_obtener_supervisores_horarios();

procedimiento 3

info porcedimiento

Este procedimiento devuelve una lista de archivistas, junto con la información de sus respectivos hospitales y almacenes. Los parámetros de entrada son p_codarchivista, p_nombre_hospital y p_ubicacion_almacen, que se utilizan para filtrar los resultados por código de archivista, nombre de hospital y ubicación de almacén, respectivamente. El procedimiento devuelve tres columnas: codarchivista (el código del archivista), hospital_nombre (el nombre del hospital asociado al archivista) y ubicacion (la ubicación del almacén asociado al archivista).

procedimiento

DELIMITER //
CREATE PROCEDURE sp_obtener_archivistas(
IN p_codarchivista INT(11),
IN p_nombre_hospital VARCHAR(50),
IN p_ubicacion_almacen VARCHAR(40)
)
BEGIN
SELECT a.codarchivista, h.nombre AS hospital_nombre, al.ubicacion AS ubicacion
FROM tblarchivistas a
JOIN tblhospitales h ON a.codhospital = h.codhospital
JOIN tblalmacenes al ON a.codhospital = al.codarchivista
WHERE a.codarchivista = p_codarchivista
AND h.nombre LIKE CONCAT('%', p_nombre_hospital, '%')
AND al.ubicacion LIKE CONCAT('%', p_ubicacion_almacen, '%');
END//
DELIMITER ;

call del procedimiento

CALL sp_obtener_archivistas();

procedimiento 4

info porcedimiento

Este procedimiento devuelve una lista de materiales, junto con la información de sus respectivas bodegas. Los parámetros de entrada son p_carpeta y p_ubicacion_bodega, que se utilizan para filtrar los resultados por carpeta del material y ubicación de la bodega, respectivamente. El procedimiento devuelve dos columnas: carpeta (la carpeta del material) y bodega_ubicacion (la ubicación de la bodega asociada al material).

procedimiento

DELIMITER //
CREATE PROCEDURE sp_obtener_materiales(
IN p_carpeta INT(11),
IN p_ubicacion_bodega VARCHAR(50)
)
BEGIN
SELECT m.carpeta, b.ubicacion AS bodega_ubicacion
FROM tblmateriales
JOIN tblbodegas b ON m.codbodega = b.codbodega
WHERE m.carpeta = p_carpeta
AND b.ubicacion LIKE CONCAT('%', p_ubicacion_bodega, '%');
END//
DELIMITER ;

call del procedimiento

CALL sp_obtener_materiales();

procedimiento 5

info porcedimiento

Este procedimiento devuelve una lista de trabajadores, junto con la información de sus respectivos supervisores y hospitales. Los parámetros de entrada son p_cargo, p_nombre_supervisor y p_nombre_hospital, que se utilizan para filtrar los resultados por cargo del trabajador, nombre del supervisor y nombre del hospital, respectivamente. El procedimiento devuelve tres columnas: cargo (el cargo del trabajador), supervisor_nombre (el nombre del supervisor asociado al trabajador) y hospital_nombre (el nombre del hospital asociado al trabajador).

procedimiento

DELIMITER //
CREATE PROCEDURE sp_obtener_trabajadores(
IN p_cargo VARCHAR(50),
IN p_nombre_supervisor VARCHAR(40),
IN p_nombre_hospital VARCHAR(50)
)
BEGIN
SELECT t.cargo, s.nombre AS supervisor_nombre, h.nombre AS hospital_nombre
FROM tbltrabajadores t
JOIN tblsupervisores s ON t.codsupervisor = s.codsupervisor
JOIN tblhospitales h ON t.codhospital = h.codhospital
WHERE t.cargo LIKE CONCAT('%', p_cargo, '%')
AND s.nombre LIKE CONCAT('%', p_nombre_supervisor, '%')
AND h.nombre LIKE CONCAT('%', p_nombre_hospital, '%');
END//
DELIMITER ;

call del procedimiento

CALL sp_obtener_trabajadores();

procedimiento 6

info procedimiento

Este procedimiento devuelve información detallada sobre un hospital específico, incluyendo el número de clientes y archivistas asociados. Los parámetros de entrada son p_codhospital, p_nombre_hospital, p_nombre_ciudad y p_nombre_departamento, que se utilizan para filtrar los resultados por código del hospital, nombre del hospital, nombre de la ciudad y nombre del departamento, respectivamente. El procedimiento devuelve cinco columnas: hospital_nombre (el nombre del hospital), ciudad_nombre (el nombre de la ciudad asociada al hospital), departamento_nombre (el nombre del departamento asociado al hospital), num_clientes (el número de clientes asociados al hospital) y num_archivistas (el número de archivistas asociados al hospital).

procedimiento

DELIMITER //
CREATE PROCEDURE sp_get_hospital_info(
IN p_codhospital INT,
IN p_nombre_hospital VARCHAR(50),
IN p_nombre_ciudad VARCHAR(50),
IN p_nombre_departamento VARCHAR(50) )
BEGIN
SELECT
h.nombre AS hospital_nombre,
c.nombre AS ciudad_nombre,
d.nombre AS departamento_nombre,
COUNT(DISTINCT cl.codcliente) AS num_clientes,
COUNT(DISTINCT a.codarchivista) AS num_archivistas
FROM
tblhospitales h
JOIN tblciudades c ON h.codciudad = c.codciudad
JOIN tbldepartamentos d ON c.coddepartamento = d.coddepartamento
LEFT JOIN tblclientes cl ON h.codhospital = cl.codhospital
LEFT JOIN tblarchivistas a ON h.codhospital = a.codhospital
WHERE h.codhospital = p_codhospital
AND h.nombre LIKE CONCAT('%', p_nombre_hospital, '%')
AND c.nombre LIKE CONCAT('%', p_nombre_ciudad, '%')
AND d.nombre LIKE CONCAT('%', p_nombre_departamento, '%')
GROUP BY
h.nombre,
c.nombre,
d.nombre;
END//
DELIMITER ;

call del procedimiento

CALL sp_get_hospitales_info();