I want to create a stored procedure where the parameters might be optional. So I tried with the below stored procedures.
create or replace PROCEDURE FETCH_CMP_CONSOLIDATED_REPORT
(
P_STATENAME IN NVARCHAR2,
P_CITYNAME IN NVARCHAR2,
P_FROMDATE IN DATE,
P_TODATE IN DATE,
TBLOUT OUT SYS_REFCURSOR
)
AS
V_QUERY_STRING NVARCHAR2(5000);
V_WHERE_CONDITION NVARCHAR2(5000);
BEGIN
OPEN TBLOUT FOR
V_QUERY_STRING = '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
FROM changerequests a
inner join tbl_pre_post_hoto b
on a.changerequestid = b.CHANGEREQUEST_ID';
IF P_STATENAME IS NOT NULL THEN
V_WHERE_CONDITION = 'WHERE a.statename = P_STATENAME';
ELSIF P_CITYNAME IS NOT NULL THEN
V_WHERE_CONDITION = 'WHERE a.cityname = P_CITYNAME';
ELSIF P_FROMDATE IS NOT NULL THEN
V_WHERE_CONDITION = 'WHERE a.createdon = P_FROMDATE';
ELSE P_TODATE IS NOT NULL THEN
V_WHERE_CONDITION = 'WHERE a.lastmodifiedon = P_TODATE';
END;
END FETCH_CMP_CONSOLIDATED_REPORT;
But there are some errors like
Error(27,19): PLS-00103: Encountered the symbol "=" when expecting one of the following: := . ( @ % ; The symbol ":= was inserted before "=" to continue.
How to create dynamic conditions based on the values supplied?