Skip to main content

Command Palette

Search for a command to run...

APEX_APPLICATION.STOP_APEX_ENGINE: Detener el motor de Oracle APEX en el momento justo

Updated
2 min read
APEX_APPLICATION.STOP_APEX_ENGINE: Detener el motor de Oracle APEX en el momento justo

Cuando trabajamos con Oracle APEX solemos pensar que cada request sigue siempre el mismo ciclo:

Render → Procesos → Branch → HTML → Respuesta al navegador

Pero hay situaciones en las que queremos cortar ese flujo inmediatamente.
Por ejemplo:

  • Redirecciones manuales

  • Respuestas REST personalizadas

  • Descarga de archivos

  • APIs hechas en PL/SQL

  • Seguridad (evitar que APEX agregue HTML inesperado)

  • Generación de JSON/XML puro

¿Qué hace realmente STOP_APEX_ENGINE?

El procedimiento:

begin
    APEX_APPLICATION.STOP_APEX_ENGINE;
end;

le indica al motor de APEX que detenga el procesamiento inmediatamente y salga sin agregar más HTML al buffer HTTP.

En otras palabras:

APEX deja de comportarse como página web y pasa a comportarse como backend puro

Esto es clave cuando querés controlar completamente la respuesta HTTP.

¿Por qué existe?

APEX siempre intenta ayudarte renderizando la página.

Pero eso es un problema cuando querés devolver:

  • JSON

  • XML

  • un archivo

  • una redirección manual

  • un código HTTP específico

Sin detener el motor, APEX termina agregando cosas como:

<html>
<head>...</head>
<body>...

Y eso rompe:

  • integraciones

  • APIs

  • descargas

  • iframes

  • fetch/ajax

Ejemplo : redirección manual

owa_util.redirect_url('https://apex.oracle.com');
apex_application.stop_apex_engine;

El navegador se redirige y APEX no sigue procesando la página.

El detalle que todos olvidan (y causa bugs raros)

STOP_APEX_ENGINE lanza internamente la excepción:

APEX_APPLICATION.E_STOP_APEX_ENGINE

Si tenés un WHEN OTHERS, vas a romper todo sin darte cuenta.

Oracle lo advierte claramente:
Debés volver a lanzar la excepción.

Forma correcta

BEGIN
    owa_util.redirect_url('https://apex.oracle.com');
    apex_application.stop_apex_engine;

EXCEPTION
    WHEN apex_application.e_stop_apex_engine THEN
        RAISE; -- obligatorio
    WHEN OTHERS THEN
        -- manejo real de errores
        raise_application_error(-20000, 'Error inesperado');
END;

Si no hacés esto:

  • APEX seguirá renderizando la página

  • Tendrás HTML mezclado con tu respuesta

  • Bugs imposibles de entender

APEX_APPLICATION.STOP_APEX_ENGINE no es un procedimiento más.

Es el interruptor que separa frontend de backend dentro de APEX.

Te permite convertir APEX en:

  • un generador de APIs

  • un servidor de archivos

  • un backend puro PL/SQL

  • un proveedor de servicios para SPA

Si desarrollás integraciones o endpoints y no lo usás, tarde o temprano vas a tener:

respuestas corruptas, JSON inválido o archivos rotos

Aprender a usarlo correctamente marca la diferencia entre:

desarrollar páginas APEX
desarrollar plataformas con APEX

96 views