Có, sử dụng bất kỳ cách nào sau đây:
WHERE m.id_pk = NVL(n_RequiredId, m.id_pk);
WHERE m.id_pk = COALESCE(n_RequiredId, m.id_pk);
WHERE (n_RequiredId IS NULL OR m.id_pk = n_RequiredId);
... không đáng sợ. Chúng sẽ hoạt động, nhưng hoạt động kém nhất trong số các tùy chọn hiện có.
Nếu bạn chỉ có một tham số, IF / ELSE và các câu lệnh riêng biệt, được điều chỉnh phù hợp là một lựa chọn thay thế tốt hơn.
Tùy chọn tiếp theo sau đó là SQL động. Nhưng mã hóa SQL động là vô ích nếu bạn sử dụng các vị từ không thể phân loại trong ví dụ đầu tiên. SQL động cho phép bạn điều chỉnh truy vấn trong khi cung cấp nhiều đường dẫn. Nhưng nó cũng có nguy cơ chèn SQL, vì vậy nó phải được thực hiện đằng sau các truy vấn được tham số hóa (tốt nhất là trong các thủ tục / hàm được lưu trữ trong các gói.