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

Thực thi câu lệnh sql động thành SYS_REFCURSOR

bạn sẽ phải ràng buộc các tham số pAgepPostcode . Trong SQL động, bạn sẽ đặt trước chúng bằng dấu hai chấm (: ). Nếu bạn sử dụng EXECUTE IMMEDIATE hoặc OPEN ... FOR , bạn sẽ liên kết các tham số của mình thông qua vị trí, đây là lý do tại sao tôi đổi tên chúng:P1 và:P2 trong ví dụ:

DECLARE
   lsql VARCHAR2(500) := 'SELECT c.id 
                            FROM carer c, cared_for cf, carer_cared_for ccf 
                           WHERE c.id = ccf.carer_id (+)
                             AND cf.id (+) = ccf.cared_for_id';
BEGIN
   IF pPostcode IS NULL THEN
      lsql := lsql || ' AND :P1 IS NULL';
   ELSE
      lsql := lsql || ' AND c.postcode like ''%''|| upper(:P1)||''%''';
   IF pPostcode pAge > 0 THEN
      lsql := lsql || ' AND :P2 = ROUND((MONTHS_BETWEEN(sysdate,
                                                        c.date_of_birth)/12))';
   ELSE
      lsql := lsql || ' AND nvl(:P2, -1) <= 0';
   END IF;
   OPEN pReport FOR lsql USING pPostcode, pAge;
END;

Lưu ý: Số lượng và vị trí của các biến liên kết phải được biết tại thời điểm biên dịch , đây là lý do tại sao tôi thường sử dụng cấu trúc ở trên (thêm tham số vào vị trí của nó ngay cả khi nó không được sử dụng). Thêm tautology (như trong AND :P1 IS NULL ) đối với một truy vấn sẽ không ảnh hưởng đến kế hoạch giải thích của 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. Chọn giá trị phần tử xml trong Oracle

  2. chọn hàng thứ 2 trong Plsql

  3. Oracle.ManagedDataAccess với Oracle 8.1.7 DB

  4. bao nhiêu CPU một phiên tiêu thụ tại một thời điểm nhất định trong oracle

  5. Cách bật chế độ nhật ký lưu trữ trong cơ sở dữ liệu Oracle 19c