sql >> Database teknologi >  >> RDS >> Oracle

skabe parametriserede visninger i oracle11g

Kontekstmetoden er beskrevet her:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

for eksempel. (eksempel tilpasset fra ovenstående link)

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

Indstil derefter datoerne i din ansøgning med:

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

Forespørg derefter parametrene med:

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');

Fordelen ved denne tilgang er, at den er meget forespørgselsvenlig; det involverer ingen DDL eller DML under kørsel, og derfor er der ingen transaktioner at bekymre sig om; og det er meget hurtigt, fordi det ikke involverer nogen SQL - PL/SQL kontekstswitch.

Alternativt:

Hvis kontekstmetoden og Johns pakkevariablemetode ikke er mulig for dig, er en anden metode at indsætte parametrene i en tabel (f.eks. en global midlertidig tabel, hvis du kører forespørgslen i samme session), og derefter slutte sig til den tabel fra udsigten. Ulempen er, at du nu skal sørge for at køre noget DML for at indsætte parametrene, når du vil køre forespørgslen.



  1. En guide til PGpool - tip og observationer:del tre

  2. 4 måder at vælge duplikerede rækker i MariaDB

  3. "ADVARSEL:Uoverensstemmelse fundet mellem sl_table og pg_class." i Slony-I

  4. Sådan indsætter du en streng, der indeholder et &