如何解决Oracle SQL多值参数-ORA-00920:无效的关系运算符
我有一个带参数v_acct_unit
的带有Oracle SQL查询的SSRS报告。此参数可以是单值,多值或null。请参阅下面的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(Multi):错误
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))
解决方法
这是关于 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,sal
2 from emp
3 where ename in (select *
4 from table(sys.odcivarchar2list('KING',''))
5 );
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 10000
SCOTT ANALYST 3000
SQL>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。