Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

tạo chế độ xem được tham số hóa trong oracle11g

Phương pháp ngữ cảnh được mô tả tại đây:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

ví dụ. (ví dụ phỏng theo liên kết trên)

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

Sau đó, đặt ngày trong đơn đăng ký của bạn với:

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

Sau đó, truy vấn các tham số với:

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

Ưu điểm của cách tiếp cận này là nó rất thân thiện với truy vấn; nó không liên quan đến DDL hoặc DML trong thời gian chạy, và do đó không có giao dịch nào phải lo lắng; và nó rất nhanh vì nó không liên quan đến chuyển đổi ngữ cảnh SQL - PL / SQL.

Ngoài ra:

Nếu bạn không thể sử dụng phương thức ngữ cảnh và phương thức biến gói của John, thì một phương pháp khác là chèn các tham số vào bảng (ví dụ:bảng tạm thời toàn cục, nếu bạn đang chạy truy vấn trong cùng một phiên), sau đó tham gia vào bảng đó từ chế độ xem. Nhược điểm là bây giờ bạn phải đảm bảo rằng bạn chạy một số DML để chèn các tham số bất cứ khi nào bạn muốn chạy truy vấn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thêm đường viền dọc vào lưới đầu ra SQL * Plus / SQLcl của bạn

  2. SQLException:Không tìm thấy trình điều khiển phù hợp cho jdbc:oracle:thin:@ // localhost:1521 / orcl

  3. Cách ghi vào tệp CSV bằng Oracle SQL * Plus

  4. Các hàm RANK, DENSE_RANK và ROW_NUMBER trong Oracle

  5. Ví dụ SQL động Oracle để chèn bản ghi bằng DBMS_SQL