sábado, 14 de septiembre de 2024
Curso de DevOps: Automatización II. Tareas y procesos clave para automatizar
sábado, 7 de septiembre de 2024
Cláusula ALTER TABLE en SQL
Introducción
El comando ALTER en SQL se usa para modificar la columna/restricción en una tabla.
Sintaxis
ALTER TABLE [nombre_tabla] ADD [nombre_columna] [tipo de dato]
Ejemplos
Añadir Columnas
ALTER TABLE Empleados
ADD FechaIncorporacion date NOT NULL DEFAULT GetDate(),
FechaDeNacimiento date NULL
La declaración anterior agregaría las columnas denominadas FechaIncorporacion que no puede ser NULL por defecto y fecha actual como valor por defecto y FechaDeNacimiento que si puede ser NULL en la tabla Empleados.
Drop Column
ALTER TABLE Empleados
DROP COLUMN salario;
Esto no solo eliminará información de esa columna, sino que también eliminará la columna salario de la tabla Empleados (la columna ya no existirá).
Drop Constraint
ALTER TABLE Empleados
DROP CONSTRAINT SalarioBase
Esto elimina una restricción llamada
SalarioBase de la definición de la tabla Empleados.
Nota: - Asegúrate de eliminar las restricciones de la columna antes de eliminar una columna.
Añadir Constraint
ALTER TABLE Empleados
ADD CONSTRAINT SalarioBase DEFAULT ((100)) FOR [Salario]
Esto agrega una restricción llamada SalarioBase que especifica un valor
predeterminado de 100 para la columna Salario.
Se puede agregar una restricción a nivel de tabla.
Tipos de constraints
• Primary Key - Clave principal: evita un registro duplicado en la tabla
• Foreign Key- Clave externa: apunta a una clave principal de otra tabla.
• Not Null: evita que se introduzcan valores nulos en una columna.
• Unique: identifica de forma única cada registro de la tabla.
• Default: especifica un valor predeterminado
• Check: limita los rangos de valores que se pueden colocar en una columna.
Para obtener más información sobre las restricciones, consulte la
documentación de Oracle.
Alter Column
ALTER TABLE Empleados
ALTER COLUMN FechaIncorporacion DATETIME NOT NULL DEFAULT (GETDATE())
Esta consulta alterará el tipo de datos de la columna de FechaIncorporacion
y lo cambiará de fecha simple a tipo DATETIME y establece el valor
predeterminado en la fecha actual.
Añadir Primary Key
ALTER TABLE EMPLEADOS ADD pk_empleadoID PRIMARY KEY (ID)
Esto agregará una clave principal a la tabla Empleados en el campo ID.
Incluyendo más de una columna en el paréntesis junto con el ID,
se creará una clave primaria compuesta. Al agregar más de una columna,
los nombres de las columnas deben estar separados por comas.
sábado, 24 de agosto de 2024
Curso de DevOps: Automatización I. Ciclos de entrega de IT automatizados
Vamos a describir el ciclo automatizado de entrega de IT y su impacto en la gestión y el monitoreo de IT. Las herramientas de supervisión y gestión de IT automatizan tareas repetitivas específicamente para profesionales de IT. El ciclo de entrega de IT comienza con la planificación, donde debemos planificar cuáles son todas las actividades comerciales o actividades de soporte que deben automatizarse. La planificación nos brinda una manera de aprovisionar y configurar. Lo que nos da la oportunidad de identificar el componente de la aplicación, el de la infraestructura y el del servicio que se pueden aprovisionar y configurar para admitir la automatización.
El tercer paso es recopilar datos operativos, porque eso nos ayudará a probar nuestra estrategia de automatización. Una vez que hayamos recopilado datos operativos de su implementación, podemos utilizar esos datos para el seguimiento. Y el monitoreo nos permite el análisis e información adecuados que el equipo de operaciones puede utilizar para improvisar aún más la automatización.
Así es como se puede
implementar IT automatizada. A continuación,
intentaremos comprender los impactos de la automatización de IT en la gestión.
Hay impactos positivos, también hay impactos negativos, esto depende de varios factores diferentes. Veremos son los impactos críticos de la automatización de IT en la gestión. En primer lugar, se basa en herramientas de software para definir el alcance de la automatización. Ese es uno de los impactos de la automatización de IT en la gestión, donde se depende mucho de las herramientas. En segundo lugar, reemplaza una serie de acciones entre los administradores y el entorno de IT, eliminando todas las tareas manuales que deben realizarse. El tercer impacto es que el sistema se vuelve capaz de desencadenar acciones de gestión automatizadas dependiendo de ciertas condiciones configuradas. En cuarto lugar, no requiere intervención manual para la conmutación por error si ha adoptado soporte de conmutación por error automatizado. También debemos comprender que la automatización de IT permite una gestión automatizada de la escala. Que se basa en condiciones y eventos prescritos, que pueden iniciar actividades de ampliación o reducción de escala. Y, por último, permite activadores automatizados de limpieza basados en reglas. Donde podemos definir varias reglas y esas reglas invocarán acciones para administrar los recursos para optimizarlos.
Es necesario
entender el papel de los ingenieros de automatización en nuestra empresa. El
ingeniero de automatización es un rol que garantiza que se facilite la creación de prácticas de automatización.
También se encargan de monitorear o controlar la producción y la entrega general, que pueden automatizarse. Son responsables de documentar todas las especificaciones de diseño relevantes para la automatización. Y aparte de eso, también desempeñan un papel importante a la hora de respaldar y ofrecer la automatización. El ingeniero de automatización también desempeña un papel esencial en la identificación de la causa raíz que les ayuda a solucionar errores de automatización. Como ingenieros de soporte, debemos tener una visión de administración para comprender el ciclo de vida del error. Siempre que se identifiquemos un nuevo error, como ingeniero de soporte lo escribiremos como un nuevo error. Después, debemos asignarlo al ingeniero de soporte que se supone debe manejarlo.
Y el estado de ese error ahora cambia de error nuevo a error asignado. Una vez asignado el error, pude tomar dos estados diferentes: el primero rechazado y el segundo abierto. Se rechaza porque al ingeniero de soporte al que se le asignó ese error en particular ya se le asignó anteriormente el mismo error, lo que significa que está duplicado. Otro motivo de rechazo es que se aplace porque depende de algún otro error. Además de rechazado, tiene los estados abierto y reabierto. El ingeniero de soporte revisa el error abierto, le aplica las correcciones correctas y cambia el estado a solucionado. Hecho esto, se prueba, y si todo está bien, se cierra. Pero sí, después de solucionarlo, si el impacto aún persiste, pasa a un estado llamado reapertura. Así es como podemos ajustar los estados de del error según nuestras necesidades. Para derivar el ciclo de vida de gestión de errores adecuado para nuestra aplicación o empresa.
sábado, 3 de agosto de 2024
Otros conceptos de SQL
Renombrar las columnas, utilizando AS
Podemos cambiar el nombre a las
columnas. Así, la llamada a un id se muestra siempre como id en el resultado.
Podemos cambiarle el nombre:
SELECT empleado.id AS id_persona, departamento.id AS id_departamento FROM empleado
JOIN departamento ON empleado.id = departamento.id_pertenece;
Después del nombre de la columna,
por ejemplo, empleado.id, utilizamos la nueva palabra clave AS y ponemos el
nuevo nombre después de ella (id_persona). Podemos repetir este proceso con
todas las columnas.
El nuevo nombre solo es un alias,
lo que significa que es temporal y no cambia el nombre real de la columna en la
base de datos. Solo influye en cómo la columna se muestra en el resultado de
dicha consulta. Esta técnica se suele utilizar cuando hay varias columnas con
el mismo nombre que proceden de diferentes tablas. Normalmente, cuando SQL
muestra las columnas en el resultado, no hay información sobre las tablas de
las que forman parte cada una de ellas.
En nuestro ejemplo, teníamos dos
columnas id, así que, las renombramos como id_persona e id_departamento,
respectivamente. Si ahora vemos las columnas en el resultado, sabremos a qué
tabla pertenece cada columna.
Filtrar tablas combinadas
Vamos a ver cómo filtrar aún más
los resultados:
SELECT empleado.id,
departamento.nombre FROM empleado JOIN departamento ON empleado.id = departamento.id_pertenece WHERE empleado.edad
< 25;
La cláusula WHERE sirve para
filtrar las filas en las que el propietario sea menor de 25 años. Es necesario
asegurarse de que se incluye el nombre de la tabla en la condición (empleado.edad).
Ordenar filas con ORDER BY
La secuencia en la que aparecen
las filas es arbitraria, y cada base de datos puede comportarse de forma
diferente. Incluso se puede ejecutar la misma instrucción de SQL varias veces y
obtener un orden diferente cada vez, salvo que se pida a la base de datos que
ordene las filas, obviamente.
SELECT * FROM pedidos ORDER BY
id_cliente;
SELECT * FROM pedidos WHERE
id_cliente = 100 ORDER BY importe_total;
SELECT * FROM empleados WHERE
fecha = 2011 ORDER BY salario;
SELECT * FROM pedidos ORDER BY
importe_total ASC;
También podemos invertir el orden
y hacer que los valores más altos aparezcan primero.
SELECT * FROM pedidos ORDER BY importe_total
DESC;
SELECT * FROM empleados ORDER BY
apellido DESC;
Ordenar en base a varias columnas
Los resultados se pueden ordenar
en base a más de una columna y, cada una de ellas, puede estar ordenada de
forma diferente:
SELECT * FROM pedidos ORDER BY
id_cliente ASC, importe_total DESC;
Como se puede ver, los resultados
se ordenarán, primero, en orden ascendente (los valores más bajos primero)
según la columna id_cliente y, luego, para cada id_cliente, los pedidos se
ordenarán en orden descendente (los valores más grandes primero) según la
columna importe_total.
Resultados duplicados
De forma predeterminada, la base
de datos devuelve todas las filas que coinciden con los criterios
especificados. Esto es lo que normalmente queremos, pero hay casos en los que
podemos querer cambiar este comportamiento.
Imagina la siguiente situación:
queremos obtener los números de cliente de todos los clientes que alguna vez
hayan hecho un pedido. Podríamos utilizar la siguiente query:
SELECT id_cliente FROM pedidos;
¿Cuál es el problema del código
en este caso?
Hay muchas filas con el mismo id_cliente,
por lo que cada cliente aparece muchas veces en los resultados.
En nuestro ejemplo de pedidos, si
un cliente hubiera hecho muchos pedidos, el ID de ese cliente se mostraría
muchas veces en los resultados. Para ello hacemos:
SELECT DISTINCT id_cliente FROM
pedidos;
Antes del nombre de la columna,
hemos añadido la palabra DISTINCT. Ahora, la base de datos eliminará los duplicados
y solo mostrará los valores únicos. Cada id_cliente aparecerá solo una vez.
Seleccionar valores únicos de varias columnas
También se puede utilizar
DISTINCT en un grupo de columnas. Observa el siguiente código:
SELECT DISTINCT id_cliente,
fecha_de_pedido FROM pedidos;
Un cliente puede hacer muchos
pedidos cada día, pero si solo queremos saber en qué días cada cliente hizo al
menos un pedido, la consulta anterior nos dará el resultado que deseamos.
COUNT Contar las filas
Es posible calcular las estadísticas
de varias filas. Esta operación se llama agregación.
SELECT COUNT(*) FROM empleados;
En lugar del asterisco (*), que
significa "todo", ponemos la expresión COUNT(*).
COUNT(*) es una función. Las
funciones de SQL siempre tienen un nombre seguido de un paréntesis. En los
paréntesis, se puede poner la información que la función necesita para
funcionar. Por ejemplo, COUNT() calcula el número de filas especificado en el
paréntesis.
En este caso, utilizamos
COUNT(*), que significa "contar todas las filas". Como resultado,
solo obtendremos la cantidad total de filas que tiene la tabla empleados, en
vez de su contenido.
Contar las filas e ignorar los valores NULL
Podemos pedir a la base de datos
que cuente los valores de una columna específica, por ejemplo, de la siguiente
manera:
SELECT COUNT(id_empleado) FROM empleados;
¿Cuál es la diferencia entre
COUNT(*) y COUNT(id_empleado)? Pues, la primera opción cuenta todas las filas
de la tabla y, la segunda, cuenta todas las filas en las que la columna
id_cliente tiene un valor que no sea nulo. En otras palabras, si hay un NULL en
la columna id_cliente, esa fila no se contará.
Contar los valores únicos de una columna
También podemos añadir la palabra
clave DISTINCT a nuestra función COUNT() de la siguiente manera:
SELECT COUNT(DISTINCT id_cliente)
AS clientes_unicos FROM pedidos;
Esta vez, contamos todas las
filas que tienen valores distintos en la columna id_cliente. En otras palabras,
esta instrucción nos dice cuántos clientes diferentes hicieron un pedido hasta el
momento. Si un cliente realizó 5 pedidos, solo se contará una vez.
Obtener los valores mínimo y máximo
SELECT MIN(importe_total) FROM
pedidos;
La función MIN(importe_total)
devuelve el valor más pequeño de la columna importe_total. Así, podemos saber
el pedido más barato de nuestra tabla.
También, se puede utilizar una
función similar llamada MAX(), que devuelve el valor más alto de la columna
especificada.
Obtener el promedio
SELECT AVG(importe_total) FROM
pedidos WHERE id_cliente = 100;
La función AVG() devuelve el
promedio de la columna especificada.
En el ejemplo de arriba se
obtiene el promedio del pedido del cliente con id 100.
Obtener la suma
SELECT SUM(importe_total) FROM
pedidos WHERE id_cliente = 100;
La instrucción anterior devolverá
la suma total de los importes todos los pedidos realizados por el cliente con
id 100.
sábado, 13 de julio de 2024
Ejecutar y depurar un paquete de Oracle con PL/SQL Developer
Vamos a aprender a ejecutar paquetes de Oracle desde PL/SQL Developer, si aun así no nos sirve y queremos ver lo que hace por dentro, podemos depurarlo.
Ejecutar
Para ejecutar un paquete hay que compilarlo antes en el PL/SQL para que coja la información de compilación. Desde la pestaña de la izquierda de objetos
Nos colocamos sobre el objeto a depurar y con el botón derecho del ratón pulsamos Edit Spec & body
Esto nos abre una pantalla con el paquete de Oracle, es necesario compilarla ejecutando el triángulo verde para que pueda reconocerla luego el depurador.
Hecho esto abrimos una ventana de test
Y le ponemos la llamada al paquete
BEGIN
PAQUETE.FUNCION
END
Si es una función hay que declarar una variable que tome lo que devuelve
declare
resultado varchar2(20);
begin
resultado:= rd_funciones_clientes.F_DAME_FILTRO_FECHAS_OTIF('6-6-2023','9-6-2023','BRR',1);
end;
Es importante que elijamos Package bodies (si cogemos Package) solo muestra las definiciones y no entra en el código. Ejecutamos pulsando el botón verde triangular
Para poner los puntos de ruptura hay que posicionarse en los números de línea y pulsar el botón derecho del ratón.
Para depurar paso a paso
Cerramos la test window que abrimos en el paso anterior y nos colocamos sobre la función del paquete a depurar que se abrió al pulsar sobre Edit Spec & body.
Con el botón derecho del ratón sobre los números de la izquierda
podemos colocar puntos de ruptura para que se pare la ejecución en esos puntos.
Comenzamos la ejecución pulsando sobre el triángulo verde. La línea actual se muestra en azul.
Vamos paso a paso pulsando sobre las flechas de la toolbar
Si no pasa por la función definida posiblemente se nos ha olvidado compilarla (ver más arriba)
Podemos ver el valor que van tomando las variables escribiendo su nombre en la ventana inferior
Para acceder a ella ejecutando paso a paso desde la carga del interfaz podemos poner un punto de ruptura en la función a depurar.
Ojo, si no para es porque no entra en la función y hay que revisar la condiciones de llamada a la función
Si no cumple estas condiciones, nunca llama a la función definida y no podremos depurarla.
sábado, 6 de julio de 2024
Clausula UNION en SQL
Esta clausula sirve para combinar los resultados de dos o más consultas.
SELECT * FROM jefe WHERE departamento
= 'Ventas' UNION SELECT * FROM empleado WHERE
departamento = 'Ventas';
Como se puede ver, primero
seleccionamos todos los jefes del departamento de ventas y luego, utilizamos la
palabra clave UNION para añadir todos los empleados del departamento de ventas.
¿Podríamos dividir esta
instrucción en dos consultas distintas? Sí. Pero, utilizando una UNION,
obtenemos, juntos, todos los resultados de la primera tabla más todos los
resultados de la segunda tabla.
Requisitos para usar UNION. Para
que los resultados puedan combinarse en una sola tabla, las dos tablas deben
tener el mismo número de columnas. También debemos recordar que sus columnas
respectivas deben tener almacenado el mismo tipo de dato (número o texto).
Si, por ejemplo, en la columna
lugar, una de tus tablas tiene almacenados números (1, 2, 3) y, la otra, tiene
textos ("primero", "segundo", "tercero"), no
funcionará.
Clausula UNION ALL
De forma predeterminada, UNION
elimina las filas duplicadas. Por suerte, esto se puede cambiar. Solo hay que
escribir UNION ALL en lugar de UNION en la consulta
SELECT * FROM jefe WHERE
departamento = 'Ventas' UNION ALL SELECT
* FROM empleado WHERE departamento = 'Ventas';
... para obtener todas las filas,
aunque sean iguales. Es decir haya empleados que aparezcan como jefe y como
empleado.
Clausula INTERSECT
SELECT * FROM jefe WHERE
departamento = 'Ventas' INTERSECT SELECT
* FROM empleado WHERE departamento = 'Ventas';
En lugar de UNION (o UNION ALL),
escribimos INTERSECT. ¿Cuál es la diferencia?
UNION devuelve todos los
resultados de la primera consulta más los resultados de la segunda. INTERSECT,
en cambio, solo muestra las filas que están en AMBAS tablas.
En este caso, obtendríamos los
empleados que a su vez son jefes del departamento de Ventas.
Los requisitos aquí siguen siendo
los mismos: el número de columnas de ambas tablas debe ser el mismo y los tipos
de valores (número o texto) deben coincidir.
Clausula EXCEPT
SELECT * FROM jefe WHERE
departamento = 'Ventas' EXCEPT SELECT *
FROM empleado WHERE departamento = 'Ventas';
Muestra todos los resultados de
la primera tabla (la anterior a EXCEPT), excepto los resultados que también
aparecen en la segunda tabla (la posterior a EXCEPT).
En nuestro ejemplo, veremos todas
los empleados, MENOS los jefes aparezcan
también en la tabla de empleados.