sql >> Database >  >> RDS >> Oracle

het creëren van geparametriseerde views in oracle11g

De contextmethode wordt hier beschreven:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

bijv. (voorbeeld aangepast van de bovenstaande 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;
/

Stel vervolgens de data in uw aanvraag in met:

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

Vraag vervolgens de parameters op met:

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

Het voordeel van deze aanpak is dat deze zeer vraagvriendelijk is; het omvat geen DDL of DML tijdens runtime, en daarom zijn er geen transacties om je zorgen over te maken; en het is erg snel omdat er geen SQL - PL/SQL-contextomschakeling nodig is.

Alternatief:

Als de contextmethode en de methode van John's pakketvariabelen voor u niet mogelijk zijn, is een andere manier om de parameters in een tabel in te voegen (bijvoorbeeld een globale tijdelijke tabel, als u de query in dezelfde sessie uitvoert), en vervolgens deelnemen aan die tabel van het uitzicht. Het nadeel is dat je er nu voor moet zorgen dat je wat DML uitvoert om de parameters in te voegen wanneer je de query wilt uitvoeren.



  1. MySQL cast/converteert automatisch een string naar een nummer?

  2. Werken met triggers in een MySQL-database - een zelfstudie

  3. Een POST-verzoek verzenden met formuliergegevens en parameters in PL/SQL

  4. Een string splitsen in MySQL