sql >> Databáze >  >> RDS >> Oracle

vytváření parametrizovaných pohledů v oracle11g

Kontextová metoda je popsána zde:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

např. (příklad upraven z výše uvedeného odkazu)

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

Poté nastavte data v aplikaci pomocí:

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

Poté zadejte dotaz na parametry pomocí:

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

Výhodou tohoto přístupu je, že je velmi přátelský k dotazům; nezahrnuje žádné DDL nebo DML za běhu, a proto se nemusíte obávat žádných transakcí; a je velmi rychlý, protože nezahrnuje žádné přepínání kontextu SQL - PL/SQL.

Případně:

Pokud pro vás kontextová metoda a metoda John's package variables nejsou možné, další možností je vložit parametry do tabulky (např. globální dočasné tabulky, pokud dotaz spouštíte ve stejné relaci) a poté se k této tabulce připojit. z pohledu. Nevýhodou je, že se nyní musíte ujistit, že spustíte nějaké DML pro vložení parametrů, kdykoli budete chtít spustit dotaz.



  1. Seřadit posledních N řádků v databázi?

  2. Jak povolit výstup RPC pomocí T-SQL

  3. Jak vytvořit formulář pomocí Průvodce formulářem

  4. Jak optimalizovat výkon MySQL pomocí MySQLTuner