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;
/

Entradas relacionadas: