Logo

PL/SQL en Oracle

Subprogramas

Juan David Peña

Juan David Peña

2/23/2026 · 2 min read

PL/SQL Oracle


Bloque anónimo = temporal, no reutilizable Subprograma = permanente, tú lo llamas Trigger = permanente, Oracle lo llama solo Bind variable = seguridad + rendimiento (siempre usar en SQL dinámico)

BLIND VARIABLES


Oracle analiza (parsea) cada sentencia SQL y genera un plan de ejecución. Si el valor va literal, cada llamada es una sentencia nueva → más trabajo. Con bind variable → una sola sentencia, N ejecuciones

SELECT Price FROM TITLE WHERE TitleID = 101  -- sentencia 1
SELECT Price FROM TITLE WHERE TitleID = 102  -- sentencia 2
SELECT Price FROM TITLE WHERE TitleID = 103  -- sentencia 3

SELECT Price FROM TITLE WHERE TitleID = :1   -- reutiliza el plan

SUBPROGRAMA


SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE sp_saludoNombre (param_nombre IN VARCHAR2)
/*
Autor: Juan Peña
Fecha: Feb 23/02/2026
Descripcion: Este SP crea un mensaje personalizado como saludo
*/
IS
    vv_mensaje VARCHAR2(100);
BEGIN
    vv_mensaje := 'Hola  ' || param_nombre || ' tu papá' ;
    dbms_output.put_line(vv_mensaje);
END sp_saludoNombre;
/


Con nombre · Se guardan en BD · Reutilizables · Tienen parámetros

BUENAS PRACTICAS: COMENTAR ANTES DE IS, USAR NOMENCLATURA Y TERMINAR CON /
SE LLAMA DESDE UN BLOQUE ANONIMO

Funcion

BEGIN
    sp_saludoNombre('Wilsoon');
END;
/


ULTIMO VIERNES

CREATE OR REPLACE PROCEDURE sp_saludar (param_nombre IN VARCHAR2 DEFAULT 'Ingeniero', param_fecha IN DATE DEFAULT SYSDATE)
/*
AUTOR: Juan Peña
FECHA: 23/02/2026
DESCRIPCIÓN: Este sp genera un texto saludando a alguien y le dice el ultimo viernes del mes.
*/
IS -- o AS (da igual)
vv_textoConcatenado VARCHAR2(100);
vd_ultimoViernes DATE;

BEGIN
vv_textoConcatenado := 'Hola, ' || param_nombre || ' tu papá ';
dbms_output.put_line(vv_textoConcatenado);

 vd_ultimoViernes := NEXT_DAY(LAST_DAY(param_fecha) - 7, 'VIERNES');
 dbms_output.put_line ('El ultimo viernes es ' || vd_ultimoViernes);

END sp_saludar;
/



Principal

CaracterísticaDescripción
Error HandlingSección EXCEPTION captura errores en tiempo de ejecución
Variables/ConstantesDECLARE v_x NUMBER; c_iva CONSTANT NUMBER := 0.19;
%TYPE / %ROWTYPEAdaptan tipo al esquema: employees.salary%TYPE
CursoresPuntero a resultado SQL: implícito (auto) o explícito (manual)
PaquetesAgrupan procedimientos, funciones y variables relacionados
I/O principalDBMS_OUTPUT.PUT_LINE() para debug/salida en consola
Compilación condicional$IF $$DEBUG $THEN … $END — activa código por flag
Cursor FOR LOOPProcesa filas una a una sin OPEN/FETCH/CLOSE manual



Excepciones Predefinidas Frecuentes

ExcepciónCuándo ocurre
NO_DATA_FOUNDSELECT INTO no devuelve filas
TOO_MANY_ROWSSELECT INTO devuelve más de una fila
ZERO_DIVIDEDivisión entre cero
VALUE_ERRORError de conversión o tamaño de variable
OTHERSCualquier excepción no manejada arriba



Comandos Esenciales de Entorno


SET SERVEROUTPUT ON;          -- activar salida de DBMS_OUTPUT
SHOW ERRORS;                  -- ver errores de compilación
DESC TITLE;                   -- ver estructura de una tabla
SELECT * FROM USER_ERRORS;    -- errores de objetos PL/SQL