Logo

Conceptos basicos de PL/SQL en Oracle

Conceptos del Test

Juan David Peña

Juan David Peña

3/1/2026 · 2 min read

PL/SQL Oracle

Convenciones de Nomenclatura

Subprogramas: sp_nombreProcedimiento (máx. 30 caracteres)
Variables: prefijo + camelCase después del guion bajo
Constantes: cn_nombreConstante

PrefijoTipo
vv_VARCHAR2
vd_DATE
vn_NUMBER
vdo_DOUBLE
cn_CONSTANT

Estructura del Bloque PL/SQL


BEGIN y END son los únicos obligatorios DECLARE y EXCEPTION son opcionales

DECLARE      -- (1) Opcional: variables, constantes, cursores
BEGIN        -- (2) Obligatorio: lógica ejecutable
EXCEPTION    -- (3) Opcional: manejo de errores
END;         -- (4) Obligatorio: cierre del bloque

Operadores Clave

OperadorUsoEjemplo
:=Asignaciónvn_i := vn_i + 1
=ComparaciónIF vn_i = 5
IS NULLVerificar nuloIF p_fecha IS NULL
IS NOT NULLVerificar no nuloIF p_nombre IS NOT NULL

⚠️ Nunca uses = NULL — siempre devuelve FALSE. Usa IS NULL.


Control de Flujo IF / ELSIF / ELSE

La condición siempre evalúa booleano (TRUE/FALSE/NULL)

Si es NULL, se comporta como FALSE

Estructuras de Bucle

-- FOR: número fijo de veces
FOR vn_i IN 1..5 LOOP
    ...
END LOOP;

-- WHILE: mientras condición sea verdadera
WHILE vn_intentos < 3 LOOP
    vn_intentos := vn_intentos + 1;
END LOOP;

Mecanismos anti-bucle infinito Contador de intentos con límite máximo EXIT WHEN condición para salir anticipadamente

RETURN en Procedimientos


RETURN sin valor termina el procedimiento anticipadamente No lleva valor (a diferencia de las funciones) Puede aparecer varias veces en el mismo procedimiento Patrón estándar: asignar mensaje al parámetro OUT → luego RETURN
IF vdo_monto < 0 THEN
    vv_mensaje := 'Monto inválido';
    RETURN;   -- sale sin ejecutar más código
END IF;

Parámetros de Procedimientos


ModoDirecciónDefault si no se especifica
INEntrada (solo lectura)✅ Sí, es el default
OUTSalida (el procedimiento asigna)
IN OUTEntrada y salida

CREATE OR REPLACE PROCEDURE sp_ejemplo(
    vv_entrada   IN  VARCHAR2,    -- solo lectura
    vv_salida    OUT VARCHAR2,    -- el proc. le asigna valor
    vdo_mixto    IN OUT NUMBER    -- entrada y salida
) IS
BEGIN
    vv_salida := 'resultado';
END sp_ejemplo;

SQL Dinámico Nativo

Orden obligatorio: primero INTO, luego USING

INTO ← Entra al programa Captura resultado de SELECT
USING → Sale hacia el SQL Pasa valores a :placeholders


EXECUTE IMMEDIATE <sql_string>
    [INTO <variable>]     -- captura resultado del SELECT
    [USING <valores>];    -- pasa valores a placeholders (:x)


Cuándo usar SQL dinámico
SituaciónSolución
Consulta fija en compilaciónSQL estático (SELECT … INTO)
Estructura cambia en ejecuciónSQL dinámico (EXECUTE IMMEDIATE)
Valor de filtro variableUSING con placeholder :x
Nombre de columna/tabla variableConcatenar + validar lista blanca
-- NO funciona: columnas/tablas no son bind variables
vv_sql := 'SELECT :col FROM empleados';
EXECUTE IMMEDIATE vv_sql USING 'nombre';

-- Correcto: validar y concatenar
IF vv_col IN ('nombre','salario') THEN
    vv_sql := 'SELECT ' || vv_col || ' FROM empleados WHERE id = :x';
    EXECUTE IMMEDIATE vv_sql INTO vv_resultado USING vn_id;
END IF;