sql >> Base de Datos >  >> RDS >> Oracle

creando vistas parametrizadas en oracle11g

El método de contexto se describe aquí:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

p.ej. (ejemplo adaptado del enlace anterior)

CREATE CONTEXT dates_ctx USING set_dates_ctx_pkg;

CREATE OR REPLACE PACKAGE set_dates_ctx_pkg IS 
  PROCEDURE set(d1 in date, d2 in date); 
END; 
/

CREATE OR REPLACE PACKAGE BODY set_dates_ctx_pkg IS
  PROCEDURE set(d1 in date, d2 in date) IS 
  BEGIN 
    DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd1', TO_CHAR(d1,'DD-MON-YYYY'));
    DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd2', TO_CHAR(d2,'DD-MON-YYYY'));
  END;
END;
/

Luego, establezca las fechas en su aplicación con:

BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/

Luego, consulta los parámetros con:

SELECT bla FROM mytable
WHERE mydate
  BETWEEN TO_DATE(
            SYS_CONTEXT('dates_ctx', 'd1')
          ,'DD-MON-YYYY')
      AND TO_DATE(
            SYS_CONTEXT('dates_ctx', 'd2')
          ,'DD-MON-YYYY');

La ventaja de este enfoque es que es muy fácil de consultar; no involucra DDL o DML en tiempo de ejecución y, por lo tanto, no hay transacciones de las que preocuparse; y es muy rápido porque no involucra cambio de contexto SQL - PL/SQL.

Alternativamente:

Si el método de contexto y el método de variables de paquete de John no son posibles para usted, otro es insertar los parámetros en una tabla (por ejemplo, una tabla temporal global, si está ejecutando la consulta en la misma sesión), luego únase a esa tabla de la vista La desventaja es que ahora debe asegurarse de ejecutar algún DML para insertar los parámetros cada vez que desee ejecutar la consulta.