JPO : Webinar d'information sur nos formations → RDV mardi à 17h30.

PL/SQL: Un lenguaje poderoso para la gestión de bases de datos Oracle

En el campo de los artículos sobre bases de datos relacionales, Oracle se destaca no solo por la robustez de sus sistemas de gestión, sino también por las herramientas avanzadas que ofrece a los desarrolladores para optimizar, automatizar y asegurar las operaciones sobre los datos. Dentro de estas herramientas se encuentra PL/SQL (Procedural Language/Structured Query Language), un lenguaje de programación poderoso diseñado para integrarse con SQL, el lenguaje de consulta estándar para las bases de datos relacionales.

PL/SQL extiende las capacidades de SQL añadiendo funcionalidades procedimentales tales como bucles, condiciones y excepciones, permitiendo así a los desarrolladores crear scripts para la gestión de bases de datos.

Este lenguaje, esencial para todo desarrollador que trabaje con Oracle, tiene como objetivo combinar los comandos de gestión de bases de datos con un lenguaje de programación procedimental. Proporciona soluciones de programación más completas para la creación de aplicaciones críticas que funcionan sobre la base de datos de Oracle.

¿Por qué aprender PL/SQL?

PL/SQL es un lenguaje de programación esencial para los desarrolladores que utilizan bases de datos. Presenta muchos beneficios:

  • Integración con Oracle Database: PL/SQL está diseñado para funcionar de manera óptima con Oracle Database, permitiendo una interacción fluida y eficiente con los datos almacenados.
  • Integración con SQL: PL/SQL es una extensión del lenguaje SQL que permite escribir consultas SQL complejas, gestionar transacciones y manipular los datos directamente en el mismo entorno de programación.
  • Facilidad de uso: Si ya estás familiarizado con SQL, encontrarás la sintaxis de PL/SQL bastante intuitiva. La transición de SQL a PL/SQL es natural para aquellos que tienen experiencia en SQL, lo que facilita el aprendizaje de este lenguaje.
  • Seguridad reforzada: PL/SQL incluye funcionalidades de seguridad robustas, controlando así el acceso a los datos. Puedes proteger los datos sensibles limitando el acceso directo a las tablas y creando capas adicionales de seguridad.
  • Automatización de tareas repetitivas: PL/SQL incluye funcionalidades (procedimientos, funciones, triggers) que permiten automatizar los procesos de gestión de bases de datos. Esto reduce la necesidad de ejecución manual de tareas repetitivas y minimiza los errores humanos.
  • Portabilidad: Los bloques de código PL/SQL pueden ser trasladados entre diferentes bases de datos Oracle sin modificación.

¿Cuáles son las diferentes aplicaciones de PL/SQL?

PL/SQL ofrece una multitud de aplicaciones en la gestión de bases de datos. Gracias a su flexibilidad y potencia, se utiliza para diversos casos de uso tales como:

  • Desarrollo de aplicaciones: PL/SQL se utiliza para el desarrollo de aplicaciones web basadas en bases de datos Oracle.
  • Automatización de tareas administrativas: PL/SQL permite la automatización de tareas comunes de administración de bases de datos, mejorando así la eficiencia y la fiabilidad de los procesos.
  • Seguridad de la base de datos: PL/SQL permite proteger la integridad de la base de datos.
  • Análisis y reportes: PL/SQL se utiliza para generar reportes personalizados que responden a necesidades específicas en materia de gestión de datos. PL/SQL también permite generar datos para los dashboards y las herramientas de visualización.

¿Cuáles son las bases de la sintaxis de PL/SQL?

Un programa PL/SQL está estructurado en bloques. Cada bloque puede contener tres secciones principales:
  • Sección declarativa (DECLARE): Esta sección se utiliza para declarar variables, constantes, cursores y otros objetos PL/SQL. Es opcional.
  • Sección ejecutable (BEGIN): Esta sección contiene las instrucciones que serán ejecutadas. Es obligatoria.
  • Sección de excepción (EXCEPTION): Esta sección se utiliza para gestionar los errores que pueden surgir durante la ejecución de las instrucciones en la sección BEGIN. Es opcional.

1. Variables y tipos de datos:

Las variables en PL/SQL deben ser declaradas en la sección DECLARE. Los tipos de datos utilizados para las variables son similares a los de SQL, con extensiones específicas para PL/SQL.

VARCHAR2 : Utilizado para las cadenas de caracteres.

NUMBER : Utilizado para los números.

DATE : Utilizado para las fechas y horas.

Ejemplo:

DECLARE

   v_employee_name VARCHAR2(50);

   v_salary NUMBER(10, 2);

   v_hire_date DATE;

BEGIN

   v_employee_name := ‘Jane Doe’; 

   v_salary := 60000; 

   v_hire_date := SYSDATE; 

   DBMS_OUTPUT.PUT_LINE(‘Employee: ‘ || v_employee_name || ‘hired on: ‘ || v_hire_date);

END;

2. Estructuras condicionales:

Las estructuras condicionales permiten probar condiciones y ejecutar bloques de código en función de los resultados de estas pruebas.

La estructura condicional IF-THEN-ELSE permite ejecutar instrucciones si una condición es verdadera, y eventualmente otras instrucciones si es falsa.

Ejemplo:

BEGIN

   IF v_salary > 50000 THEN

      DBMS_OUTPUT.PUT_LINE(‘High salary’);

   ELSIF v_salary > 30000 THEN

      DBMS_OUTPUT.PUT_LINE(‘Medium salary’);

   ELSE

      DBMS_OUTPUT.PUT_LINE(‘Low salary’);

   END IF;

END;

3. Bucles:

PL/SQL soporta varios tipos de bucles, permitiendo ejecutar instrucciones de manera repetida.

FOR loop : Ejecuta un bloque de instrucciones un número definido de veces.

Exemple : 

BEGIN

   FOR i IN 1..10 LOOP

      DBMS_OUTPUT.PUT_LINE(‘Iteration: ‘ || i);

   END LOOP;

END;

WHILE loop : Ejecuta un bloque de instrucciones mientras una condición sea verdadera.

Ejemplo: 

DECLARE

   v_counter NUMBER := 1;

BEGIN

   WHILE v_counter <= 10 LOOP

      DBMS_OUTPUT.PUT_LINE(‘Counter: ‘ || v_counter);

      v_counter := v_counter + 1;

   END LOOP;

END;

LOOP : Ejecuta un bloque de instrucciones indefinidamente hasta que se alcance una condición de salida.

Ejemplo: 

DECLARE

   v_counter NUMBER := 1;

BEGIN

   LOOP

      EXIT WHEN v_counter > 10;

      DBMS_OUTPUT.PUT_LINE(‘Counter: ‘ || v_counter);

      v_counter := v_counter + 1;

   END LOOP;

END;

4. Procedimientos:

Los procedimientos almacenados son subprogramas PL/SQL que pueden ser reutilizados para ejecutar tareas específicas.

Aquí tienes un ejemplo de procedimiento para aumentar el salario de los empleados en función de su desempeño:

CREATE OR REPLACE PROCEDURE adjust_salary (emp_id NUMBER, increment NUMBER) AS
BEGIN
  UPDATE employees
  SET salary = salary + increment
  WHERE employee_id = emp_id;
  COMMIT;

END;

Este procedimiento toma como entrada un identificador de empleado y una cantidad de aumento, luego actualiza el salario del empleado correspondiente.

Para llamar a este procedimiento, basta con hacer:

BEGIN

   adjust_salary(1001, 5000);

END;

5. Funciones:

Las funciones son subprogramas PL/SQL que pueden devolver un valor único.

Aquí tienes un ejemplo de función que calcula el promedio de los salarios de los empleados:

CREATE OR REPLACE FUNCTION calculate_average_salary RETURN NUMBER AS
  avg_salary NUMBER;

BEGIN
  SELECT AVG(salary) INTO avg_salary FROM employees;
  RETURN avg_salary;

END;

Esta función calcula el promedio de los salarios de los empleados y devuelve el resultado.

6. Gestión de excepciones:

La gestión de excepciones es una parte esencial de PL/SQL, permitiendo gestionar los errores de manera elegante y asegurar la estabilidad de la aplicación.

Las excepciones se gestionan en la sección EXCEPTION de un bloque PL/SQL. Existen excepciones predefinidas como NO_DATA_FOUND y TOO_MANY_ROWS, además de la posibilidad de definir excepciones personalizadas.

Ejemplo:

BEGIN

   SELECT name INTO v_employee_name FROM employees WHERE employee_id = 9999;

EXCEPTION

   WHEN NO_DATA_FOUND THEN

      DBMS_OUTPUT.PUT_LINE(‘No data found for the specified employee ID.’);

   WHEN TOO_MANY_ROWS THEN

      DBMS_OUTPUT.PUT_LINE(‘Multiple rows found for the specified employee ID.’);

   WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE(‘An unexpected error occurred: ‘ || SQLERRM);

END;

7. Triggers:

Los triggers son bloques PL/SQL que se ejecutan automáticamente en respuesta a eventos específicos en una tabla, como la inserción, la actualización o la eliminación de filas.

Aquí tienes un ejemplo de trigger que registra el historial de modificaciones en una tabla crítica:

CREATE OR REPLACE TRIGGER audit_trigger
AFTER INSERT OR UPDATE OR DELETE ON employees
FOR EACH ROW
BEGIN
  IF INSERTING THEN
      INSERT INTO audit_log (action, employee_id, action_time)
      VALUES (‘INSERT’, :NEW.employee_id, SYSDATE);
  ELSIF UPDATING THEN
      INSERT INTO audit_log (action, employee_id, action_time)
      VALUES (‘UPDATE’, :NEW.employee_id, SYSDATE);
  ELSIF DELETING THEN
      INSERT INTO audit_log (action, employee_id, action_time)
      VALUES (‘DELETE’, :OLD.employee_id, SYSDATE);
  END IF;
END;

Este trigger permite seguir todas las modificaciones efectuadas en la tabla `employees` registrando las acciones en una tabla `audit_log`.

Conclusión

PL/SQL es un lenguaje poderoso que permite extender las capacidades de SQL con funcionalidades procedimentales. Ofrece ventajas significativas en términos de rendimiento, gestión de errores, seguridad y portabilidad. Gracias a sus estructuras de control, sus procedimientos almacenados, sus funciones y sus triggers, PL/SQL facilita la creación de aplicaciones robustas y eficientes. Al comprender y aplicar estos conceptos, los desarrolladores pueden aprovechar al máximo las funcionalidades ofrecidas por Oracle Database para desarrollar soluciones eficaces y fiables.

Para saber más sobre el lenguaje sql y formarte en los oficios de la Data, únete a DataScientest.

¿No está disponible?

Déjenos su dirección de correo electrónico para que podamos enviarle los nuevos artículos cuando se publiquen.