Oracle
 sql >> Baza danych >  >> RDS >> Oracle

tworzenie widoków parametrycznych w oracle11g

Metoda kontekstowa jest opisana tutaj:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

np. (przykład dostosowany z powyższego linku)

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

Następnie ustaw daty w aplikacji za pomocą:

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

Następnie zapytaj o parametry za 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');

Zaletą tego podejścia jest to, że jest bardzo przyjazne dla zapytań; nie wymaga DDL ani DML w czasie wykonywania, a zatem nie trzeba się martwić o transakcje; i jest bardzo szybki, ponieważ nie wymaga przełączania kontekstu SQL - PL/SQL.

Alternatywnie:

Jeśli metoda kontekstowa i metoda zmiennych pakietowych Johna nie są dla Ciebie możliwe, inną metodą jest wstawienie parametrów do tabeli (np. globalnej tabeli tymczasowej, jeśli zapytanie jest wykonywane w tej samej sesji), a następnie dołącz do tej tabeli z widoku. Minusem jest to, że musisz teraz upewnić się, że uruchamiasz trochę DML, aby wstawić parametry za każdym razem, gdy chcesz uruchomić zapytanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmień port Oracle z portu 8080

  2. Jak dowiedzieć się, kiedy dana tabela została utworzona w Oracle?

  3. Oracle SQL:Zrozumienie zachowania funkcji SYS_GUID() w widoku wbudowanym?

  4. Usuwanie zduplikowanych wierszy z tabeli w Oracle

  5. Alternatywy dla LIMIT i OFFSET dla stronicowania w Oracle