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 av_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 av_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.
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.
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
Ejemplo 4: Eliminar y Confirmar Datos
Ejercicios
Ejercicio 1: Seleccionar Datos
Instrucciones:
- Declara una variable para almacenar el nombre del empleado.
- Escribe una consulta
SELECT INTOpara recuperar el nombre del empleado conemployee_id = 102. - 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:
- Escribe una sentencia
INSERTpara agregar un nuevo empleado con los siguientes datos:employee_id = 209first_name = 'Alice'last_name = 'Johnson'email = '[email protected]'hire_date = SYSDATEjob_id = 'SA_REP'
- 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:
- Escribe una sentencia
UPDATEpara incrementar el salario de todos los empleados en el departamento 30 en un 7%. - Confirma la transacción con
COMMIT.
Solución:
Ejercicio 4: Eliminar Datos
Instrucciones:
- Escribe una sentencia
DELETEpara eliminar al empleado conemployee_id = 209. - Confirma la transacción con
COMMIT.
Solución:
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!
Curso de PL/SQL
Módulo 1: Introducción a PL/SQL
Módulo 2: Fundamentos de PL/SQL
- Estructura del Bloque PL/SQL
- Variables y Tipos de Datos
- Estructuras de Control
- Cursores
- Manejo de Excepciones
