En este módulo, aprenderemos cómo integrar y utilizar sentencias SQL dentro de bloques PL/SQL. PL/SQL es una extensión de SQL que permite la programación procedural en la base de datos Oracle. La capacidad de combinar SQL y PL/SQL es una de las características más poderosas de este lenguaje.

Contenido

Introducción a las Sentencias SQL en PL/SQL

PL/SQL permite ejecutar sentencias SQL directamente dentro de sus bloques. Esto incluye sentencias de manipulación de datos (DML) como SELECT, INSERT, UPDATE y DELETE, así como sentencias de control de transacciones como COMMIT y ROLLBACK.

Ventajas de Integrar SQL en PL/SQL

  • Eficiencia: Permite ejecutar múltiples operaciones SQL en un solo bloque PL/SQL.
  • Control: Proporciona estructuras de control adicionales como bucles y condiciones.
  • Manejo de Excepciones: Facilita el manejo de errores y excepciones.

Sentencias SELECT

La sentencia SELECT se utiliza para recuperar datos de la base de datos. En PL/SQL, se puede utilizar de varias maneras:

SELECT INTO

La sentencia SELECT INTO se utiliza para asignar el resultado de una consulta a variables PL/SQL.

DECLARE
    v_employee_name VARCHAR2(50);
BEGIN
    SELECT first_name INTO v_employee_name
    FROM employees
    WHERE employee_id = 100;
    
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
END;
/

Explicación:

  • DECLARE: Sección donde se declaran las variables.
  • v_employee_name: Variable que almacenará el nombre del empleado.
  • SELECT INTO: Consulta que asigna el resultado a v_employee_name.
  • DBMS_OUTPUT.PUT_LINE: Procedimiento para imprimir el resultado.

Manejo de Múltiples Filas

Si la consulta puede devolver más de una fila, se debe utilizar un cursor explícito o un bucle.

DECLARE
    CURSOR emp_cursor IS
        SELECT first_name FROM employees WHERE department_id = 10;
    v_employee_name employees.first_name%TYPE;
BEGIN
    OPEN emp_cursor;
    LOOP
        FETCH emp_cursor INTO v_employee_name;
        EXIT WHEN emp_cursor%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
    END LOOP;
    CLOSE emp_cursor;
END;
/

Explicación:

  • CURSOR emp_cursor IS: Declaración de un cursor para manejar múltiples filas.
  • OPEN emp_cursor: Abre el cursor.
  • FETCH emp_cursor INTO v_employee_name: Recupera cada fila y la asigna a v_employee_name.
  • EXIT WHEN emp_cursor%NOTFOUND: Sale del bucle cuando no hay más filas.
  • CLOSE emp_cursor: Cierra el cursor.

Sentencias DML (INSERT, UPDATE, DELETE)

INSERT

La sentencia INSERT se utiliza para agregar nuevas filas a una tabla.

BEGIN
    INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id)
    VALUES (207, 'John', 'Doe', '[email protected]', SYSDATE, 'IT_PROG');
    
    COMMIT;
END;
/

Explicación:

  • INSERT INTO: Especifica la tabla y las columnas donde se insertarán los datos.
  • VALUES: Proporciona los valores para las columnas.
  • COMMIT: Confirma la transacción.

UPDATE

La sentencia UPDATE se utiliza para modificar datos existentes en una tabla.

BEGIN
    UPDATE employees
    SET salary = salary * 1.10
    WHERE department_id = 10;
    
    COMMIT;
END;
/

Explicación:

  • UPDATE: Especifica la tabla que se actualizará.
  • SET: Define las columnas y los nuevos valores.
  • WHERE: Condición para seleccionar las filas que se actualizarán.
  • COMMIT: Confirma la transacción.

DELETE

La sentencia DELETE se utiliza para eliminar filas de una tabla.

BEGIN
    DELETE FROM employees
    WHERE employee_id = 207;
    
    COMMIT;
END;
/

Explicación:

  • DELETE FROM: Especifica la tabla de la que se eliminarán las filas.
  • WHERE: Condición para seleccionar las filas que se eliminarán.
  • COMMIT: Confirma la transacción.

Ejemplos Prácticos

Ejemplo 1: Seleccionar y Mostrar Datos

DECLARE
    v_employee_name VARCHAR2(50);
BEGIN
    SELECT first_name INTO v_employee_name
    FROM employees
    WHERE employee_id = 101;
    
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
END;
/

Ejemplo 2: Insertar y Confirmar Datos

BEGIN
    INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id)
    VALUES (208, 'Jane', 'Smith', '[email protected]', SYSDATE, 'HR_REP');
    
    COMMIT;
END;
/

Ejemplo 3: Actualizar y Confirmar Datos

BEGIN
    UPDATE employees
    SET salary = salary * 1.05
    WHERE department_id = 20;
    
    COMMIT;
END;
/

Ejemplo 4: Eliminar y Confirmar Datos

BEGIN
    DELETE FROM employees
    WHERE employee_id = 208;
    
    COMMIT;
END;
/

Ejercicios

Ejercicio 1: Seleccionar Datos

Instrucciones:

  1. Declara una variable para almacenar el nombre del empleado.
  2. Escribe una consulta SELECT INTO para recuperar el nombre del empleado con employee_id = 102.
  3. Imprime el nombre del empleado utilizando DBMS_OUTPUT.PUT_LINE.

Solución:

DECLARE
    v_employee_name VARCHAR2(50);
BEGIN
    SELECT first_name INTO v_employee_name
    FROM employees
    WHERE employee_id = 102;
    
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_employee_name);
END;
/

Ejercicio 2: Insertar Datos

Instrucciones:

  1. Escribe una sentencia INSERT para agregar un nuevo empleado con los siguientes datos:
    • employee_id = 209
    • first_name = 'Alice'
    • last_name = 'Johnson'
    • email = '[email protected]'
    • hire_date = SYSDATE
    • job_id = 'SA_REP'
  2. Confirma la transacción con COMMIT.

Solución:

BEGIN
    INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, job_id)
    VALUES (209, 'Alice', 'Johnson', '[email protected]', SYSDATE, 'SA_REP');
    
    COMMIT;
END;
/

Ejercicio 3: Actualizar Datos

Instrucciones:

  1. Escribe una sentencia UPDATE para incrementar el salario de todos los empleados en el departamento 30 en un 7%.
  2. Confirma la transacción con COMMIT.

Solución:

BEGIN
    UPDATE employees
    SET salary = salary * 1.07
    WHERE department_id = 30;
    
    COMMIT;
END;
/

Ejercicio 4: Eliminar Datos

Instrucciones:

  1. Escribe una sentencia DELETE para eliminar al empleado con employee_id = 209.
  2. Confirma la transacción con COMMIT.

Solución:

BEGIN
    DELETE FROM employees
    WHERE employee_id = 209;
    
    COMMIT;
END;
/

Conclusión

En esta sección, hemos aprendido cómo utilizar sentencias SQL dentro de bloques PL/SQL. Hemos cubierto las sentencias SELECT, INSERT, UPDATE y DELETE, y hemos visto cómo manejar múltiples filas utilizando cursores. Además, hemos practicado con ejemplos y ejercicios para reforzar los conceptos aprendidos.

En el próximo módulo, profundizaremos en el uso de cursores implícitos y explícitos en PL/SQL. ¡Sigue adelante y sigue practicando!

© Copyright 2024. Todos los derechos reservados