此问题已在此处有答案:
Oracle SQL - How to build where clause with optional search parameters(5个答案)
5小时前关闭
我想创建一个存储过程,其中参数可能是可选的。所以我尝试了下面的存储过程。
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;
但也有一些错误,如
错误(27,19):PLS-00103:当预期以下之一时,遇到符号“=”::= .(@ % ;在“=”之前插入符号“:=”以继续。
如何根据提供的值创建动态条件?
1条答案
按热度按时间bcs8qyzn1#
有一些错误,真的。
VARCHAR2
,而不是NVARCHAR2
(因为你会得到“expression is of wrong type”错误)where
条件中where
条件(连接以前的值,包括and
关键字)我没有您的表,因此我将使用Scott的示例模式来说明它。
我们试试看
另一个测试: