Categoría: Oracle


Usar función SUM con CASE – ORACLE

Trabajando en un reporte mensual, debía separar por criterio el total generado en una sumatoria. Normalmente para separarlo se utiliza la agrupación, ya tenemos la primera agrupación que sería por mes y la segunda seria por el criterio, como por ejemplo sumar el sueldo mensual de varios empleados pero diferenciando por el sueldo y bonos que tengan. Vamos a crear una tabla de pagos:

  id id_empleado fecha tipo_pago monto 1 47 01/01/2022 sueldo 100 2 47 01/01/2022 bono 10 3 56 15/01/2022 sueldo 150 4 56 15/01/2022 bono 20 5 112 30/01/2022 sueldo 200 6 112 30/01/2022 bono […]


Usar CASE en WHERE y en ORDER BY ORACLE

En algún momento si necesitamos condicionar la información de un WHERE o un ORDER BY, se puede realizar sin inconvenientes con un simple case: Ejemplo de un CASE evaluando un solo campo:

Ejemplo de un CASE si se necesita evaluar múltiples campos:

Hay que conocer la diferencia de ambos métodos para poder realizar condicionales dentro de cláusulas WHERE y ORDER BY.   Ejemplo de CASE en WHERE. En un caso con un Procedimiento PL/SQL me encontré con una tabla que incluía dos tipos de documentos, para no repetir el mismo procedimiento o realizar dos consultas dependiendo del tipo […]


Oracle Error ORA-04091: table is mutating, trigger/function may not see it

Este problema me ocurrió cuando estaba tratando de realizar un trigger para eliminar registros cuando se actualiza o elimina un registro padre dentro de la misma tabla. Por ejemplo, teniendo una tabla «clientes» que usa una relación interna id_cliente y id_cliente_referido, si el id_cliente se actualizaba o eliminaba debía cambiar/eliminar el id del referido también. Este error se genera en triggers al tratar de manipular una tabla que está siendo modificada o va a ser modificada, limitando nuestras acciones, según investigué hay varias soluciones y varias formas de que ocurra el error. Esto puede ocurrir al hacer alguna operación de […]


Buscar texto en procedimientos, funciones, objetos de oracle 1

Hubo momentos en que necesitaba buscar si una función se encontraba dentro de algún procedimiento, paquete o si se usaba dentro de otra función. Usando toad para oracle, se puede realizar búsquedas en todos los objetos con la opción «object search», pero si da problemas o no trabajas con toad, también se puede realizar las búsquedas con comandos sql. Para buscar en objetos (paquetes, funciones, procedimientos, etc) podemos buscar en dba_source o all_source. dba_source: todos los objetos de la base de datos en donde ejecutemos el sql. all_source: todos los objetos accesibles por el usuario conectado actual. Ejemplo:

Esto […]


Error en fechas al enviar correo UTL_SMTP – Oracle

Oracle incluye un paquete para el manejo de envío de correo directamente desde la base de datos. Desde que me tocó realizar una función para enviar notificaciones a clientes, he trabajado a la par con dicha librería, todas las pruebas fueron correctas, desde cambio de formato a html, múltiples recipientes de correo separados por coma, sin embargo al visualizar los correos no había notado algo importante, aunque llegaba a la bandeja de entrada de primero en outlook, tenían la fecha errada y si tienes ordenado los correos por fecha, no se encontrarían en la fecha de hoy. Este problema se […]


Limit en Oracle

Al venir de otros manejadores de base de datos, como por ejemplo Mysql, Postgres, SQLite, ya conocemos la forma de limitar registros con la clausula LIMIT, dicha clausula no existe en Oracle (tampoco en SQLServer) y siempre ha sido una polémica entre los usuarios por lo importante que es. Cómo ya estamos acostumbrados, lo consideramos como parte del estándar pero no lo es, no se contempla entre los estándares de SQL, así que es común que otros manejadores no tengan esta opción. La primera vez que necesité esta opción con Oracle, duré varias horas buscando la alternativa adecuada. Hay varias […]


Manejo de excepciones en Oracle

El manejo de errores es muy común en cualquier aplicación que estemos realizando, esto puede ser un proceso largo y tedioso si también contamos con los posibles errores de base de datos. Cuando trabajamos con Java, nos resulta más útil y rápido pasar estos mensajes o manejar excepciones a través de la base de datos directamente, nos evitamos cambiar a cada momento el código fuente por un simple mensaje. Oracle nos permite manejar nuestras propias excepciones, asociando un número de error y un mensaje, igual como se haría con excepciones en otros lenguajes de programación. Este tipo de mensajes los […]


Bloques IF en Oracle

Desde hace varios meses que estoy trabajando con Oracle y me impresiona sus capacidades, sin embargo me ha costado el cambio por la diferente sintaxis y maneras de hacer las cosas. Cuando vienes de otros manejadores como MySql y Postgres, te acostumbras a sus métodos y estrategias, ahora al cambiar a Oracle he tenido que documentarme sobre muchos procesos, desde simples SQL a grandes procedimientos en PL/SQL. Aunque el SQL es universal y si conoces sobre el lenguaje, fácilmente te puedes adaptar a cualquier manejador relacional, aún así debes adaptar ciertas cosas para que funcionen, porque también hay SQL que […]