Implementación de Sentencias SELECT INTO y Variables en Bloques PL/SQL
Clasificado en Informática
Escrito el en
español con un tamaño de 3,67 KB
Conceptos Fundamentales de PL/SQL: Sentencias y Variables
3. Uso de la Sentencia SELECT INTO en PL/SQL
En PL/SQL, la sentencia SELECT está diseñada para devolver exactamente una fila de datos. Esta fila debe ser almacenada inmediatamente en una o más variables declaradas previamente. Si la consulta devuelve cero o más de una fila, se generará un error.
Declaración de Variables con %TYPE
La variable que recibe el resultado del SELECT debe ser del mismo tipo de dato que la columna de la tabla. Para asegurar la compatibilidad y evitar errores de tipo, se recomienda usar el atributo %TYPE.
Ejemplo Conceptual:
SELECT region_id
INTO var_reg_id
FROM regions;Ejemplo de Bloque PL/SQL Completo:
DECLARE
var_region_id hr.regions.region_id%TYPE;
BEGIN
SELECT region_id
INTO var_region_id
FROM regions
WHERE region_id = 1; -- Se recomienda usar WHERE para garantizar una única fila.
END;
/5. Declaración y Asignación de Variables
La sintaxis básica para la declaración y asignación de variables en PL/SQL es:
nombreVariable tipoDeDato := valor;Ejemplos de Tipos de Datos y Asignación
Números (
NUMBER):numero_decimal NUMBER(3, 2) := 2.34;(Define un número con un total de 3 dígitos, 2 de ellos decimales.)
Cadenas de Longitud Variable (
VARCHAR2):nombre_empleado VARCHAR2(30) := 'Denisse';(Define una cadena de largo dinámico; solo se ocupa el espacio necesario para el valor asignado.)
Cadenas de Longitud Fija (
CHAR):apellido_paterno CHAR(10) := 'Ramirez';(Define una cadena de largo fijo; se ocupan todos los 10 espacios, rellenando con espacios en blanco si el valor es más corto.)
6. Ejercicio Práctico: Bloque Anónimo PL/SQL para Traslado de Personal
Problema: La empresa se ha extendido en la ciudad de Toronto (location_id=1800). Debido a las buenas condiciones económicas, se ha decidido crear el departamento de Adquisiciones (Shipping) en esta localización y trasladar personal del departamento de Adquisiciones de San Francisco (department_id = 50) a este nuevo departamento. Se debe ingresar por pantalla el ID del empleado a trasladar. Dejar para más adelante el nombramiento del jefe de departamento. Recordar que los IDs de los departamentos van de 10 en 10.
Nota: El siguiente bloque de código verifica la existencia del empleado e intenta actualizar la ubicación del departamento 50, aunque el requerimiento completo implicaría la creación de un nuevo departamento y la actualización del empleado.
Bloque PL/SQL Propuesto
DECLARE
id_empleado hr.employees.employee_id%TYPE := :codigo_empleado;
emp_ingresado hr.employees.employee_id%TYPE;
BEGIN
-- 1. Verificar si el empleado existe
SELECT employee_id
INTO emp_ingresado
FROM hr.employees
WHERE employee_id = id_empleado;
IF SQL%FOUND THEN
-- 2. Actualizar la ubicación del departamento 50 a Toronto (1800)
UPDATE hr.departments
SET location_id = 1800
WHERE department_id = 50;
DBMS_OUTPUT.PUT_LINE('Cambio ejecutado para el empleado: ' || id_empleado);
ELSE
DBMS_OUTPUT.PUT_LINE('Error: El empleado con ID ' || id_empleado || ' no existe.');
END IF;
END;
/