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 INTO
para 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
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'
- 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
UPDATE
para 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
DELETE
para 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