我有一个带有参数v_acct_unit的Oracle查询的SSRS报告。此参数可以是单个值、多值或空值。请参阅下面的3个查询参数。多值参数提供错误消息。如何解决此错误?
错误:
ORA-00920:无效的关系运算符
PARAMS-1 (单行):选择37行。
DEFINE V_BEG_DATE = "'080120'";
DEFINE V_END_DATE = "'080420'" ;
DEFINE V_ACCT_UNIT = "'0200301'" ;PARAM-2 (空):结果389行
DEFINE V_BEG_DATE = "'080120'";
DEFINE V_END_DATE = "'080420'" ;
DEFINE V_ACCT_UNIT = NULL ;PARAM-3 (多重):错误
DEFINE V_BEG_DATE = "'080120'";
DEFINE V_END_DATE = "'080420'" ;
DEFINE V_ACCT_UNIT = "'0100001','0200301','',''" ;SQL:
SELECT
company company,
acct_unit acct_unit,
description description
FROM
v_glnames names
WHERE
((&v_acct_unit) IS NULL OR acct_unit IN (&v_acct_unit))发布于 2020-08-11 05:23:30
它是关于in列表中的各种元素的。因为它是一个列表,所以不能把它当作单个值来使用。一种选择是使用分层子查询将其拆分为行。下面是一个例子:
SQL> select ename, job, sal
2 from emp
3 where ename in (select regexp_substr(replace(q'[&&par_ename]', chr(39), ''), '[^,]+', 1, level)
4 from dual
5 connect by level <= regexp_count(q'[&&par_ename]', ',') + 1
6 );
Enter value for par_ename: 'KING','','SCOTT','',''
ENAME JOB SAL
---------- --------- ----------
SCOTT ANALYST 3000
KING PRESIDENT 10000
SQL>根据您使用的工具的不同,参数的引用可能与:par_ename一样简单,但您应该知道。
另一种选择可能是:
SQL> select ename, job, sal
2 from emp
3 where ename in (select *
4 from table(sys.odcivarchar2list('KING','','SCOTT','',''))
5 );
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 10000
SCOTT ANALYST 3000
SQL>https://stackoverflow.com/questions/63351339
复制相似问题