我有一个存储过程,其中有
4-5 parameters
可以根据这些参数过滤查询。我已经创建了该过程,数据也被过滤,但我想实现一件事,如果有时用户不想传递这些参数之一,那么数据就不会被过滤。以下是我的询问。
CREATE OR REPLACE PROCEDURE FETCH_CONS_REPORT_NEW(
P_STATENAME IN VARCHAR2,
P_CITYNAME IN VARCHAR2,
P_FROMDATE IN DATE,
P_TODATE IN DATE,
TBLOUT OUT SYS_REFCURSOR )
AS
v_query_string VARCHAR2 (9000);
v_where_condition VARCHAR2 (9000);
BEGIN
OPEN TBLOUT FOR SELECT a.changerequestid, a.changerequestnumber, a.networktype, a.statename, a.cityname, a.description, a.createdon, a.lastmodifiedon, a.lastmodifiedby,a.band, b.sap_id, b.site_type, b.cr_category, b.latitude, b.longitude, b.approve_reject, b.CREATION_SAPID, b.APPROVED_BY, b.BACKHAUL, b.CR_JUSTIFICATIONS, b.CREATED_DATE FROM changerequests a inner join tbl_pre_post_hoto b ON a.changerequestid = b.CHANGEREQUEST_ID WHERE a.statename = 'Mumbai'
-- and a.cityname = null
AND a.createdon >= TO_DATE(P_FROMDATE,'DD-MM-YY') AND a.lastmodifiedon <= TO_DATE(P_TODATE,'DD-MM-YY');
END;
那么如何处理这种情况,请提出建议?
将
where
子句修改为如下所示:
WHERE ( a.statename = p_statename
OR p_statename IS NULL)
AND ( a.cityname = p_cityname
OR p_cityname IS NULL)
AND a.createdon >= NVL (p_fromdate, TRUNC (SYSDATE))
AND a.lastmodifiedon <= NVL (p_todate, TRUNC (SYSDATE))