Sepa cómo usar eficientemente la función COUNT()

Saber usar eficientemente la función COUNT te permitirá contar datos más rápidamente consiguiendo además escribir una menor cantidad de código fuente.

La función COUNT como su nombre lo indica te permite contar datos que cumplan ciertos requisitos, pero también es muy eficiente cuando se necesita buscar si existe algún dato en particular dentro de la Base de Datos.

Veamos un ejemplo práctico que te permita entender mejor el uso de la función COUNT.

Ejemplo #1: Supongamos que se quiere contar la cantidad de registros que cumplen cierta condición.

begin

select count(*)

into lin_cant_reg

from t_emplado emp

where emp.edad > 30;

exception

when no_data_found then lin_cant_reg:= null;

end;

Si bien este ejemplo esta contando correctamente los empleados cuya edad sea mayor a 30 años, existe código que está demás y no presta ninguna utilidad, lo que no significa que este malo pero es código que solo abulta nuestros procesos y debe ser borrado, como por ejemplo el uso del asterisco ‘*’ como argumento en la función COUNT el que permite contar todos registros que devuelva el comando SELECT, pero es vez de usar el asterisco se puede usar el nombre del campo ID de la tabla que en este caso es ID_EMPLEADO o solo especificar en número 1 que hace referencia al mismo campo. Al usar el nombre de una columna se contaran todos los datos que no estén nulos de la columna indicada y en este caso el campo ID siempre tendrá datos al ser un campo NOT NULL.

TÚ REPORTE: «Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos»  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

El otro código que está demás es el bloque BEGIN EXCEPTION END porque la función COUNT siempre va a devolver un registro, si encuentra datos va ha devolver la cantidad de registros que encontró, pero si no encuentra registros va ha devolver un cero ‘0’, por lo tanto nunca va ha devolver NULL y el bloque EXCEPTION nunca se va ha activar. La mejor forma de usar el COUNT en este ejemplo es eliminar el uso del asterisco y eliminar el uso del bloque BEGIN EXCEPTION END, por lo que en definitiva la consulta para contar registros quedaría así:

select count(1)

into lin_cant_reg

from t_emplado emp

where emp.edad > 30;

if lin_cant_reg > 0 then

Update …

end if;

Esta consulta siempre va a retornar un valor en la variable lin_cant_reg, esto va ha ocurrir con todas las funciones de grupo de datos, por ejemplo SUM, MAX, MIN, etc. Por lo tanto no es necesario incluir una exception para controlar el error de datos no existentes, ya que si la consulta no pudo encontrar datos la función COUNT va ha devolver siempre un cero.

Estoy muy interesado en conocer tu opinión y/o comentario sobre este artículo, también cuéntame sobre qué es lo que quieres saber de Packages en Oracle y/o dime cuál es tu principal frustración a la hora de trabajar con Packages en Oracle. Estaré muy atento respondiendo tus preguntas y/o comentarios, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Function en Oracle, Packages en Oracle, Procedures en Oracle y etiquetada , , , , , . Guarda el enlace permanente.

4 respuestas a Sepa cómo usar eficientemente la función COUNT()

  1. Cristhian dijo:

    Muy interesante la aclaracion al respecto. Pero quisiera aprovechar tus conocimientos para hacerte una pregunta cual de estos comando procesa mas rapido el comando COUNT to o SELECT COUNT por favor si puedes escribirme tu respuesta o sugerencia a este correo urbina_cr@hotmail.com

    • Hola Cristhian, el comando COUNT TO desconozco que exista en ORACLE ya que en este solo se usa la función COUNT() con el comando SELECT, la velocidad de respuesta siempre va a depender del tamaño de la o las tablas y los filtros que se apliquen para contar lo que buscas, espero haber respondido tu pregunta.

      Saludos
      Roberto Vicencio.

  2. Joaquin dijo:

    Hola amigo, he visto que programadores ocupan count solo pra validar la existencia de un valor, que se debería ocupar en ese caso?

Replica a packagesenoracle Cancelar la respuesta