Oracle 存储过程中不需要的参数则忽略

问题描述 投票:0回答:1

我有一个存储过程,其中有

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;

那么如何处理这种情况,请提出建议?

oracle join stored-procedures
1个回答
0
投票

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))
© www.soinside.com 2019 - 2024. All rights reserved.