我正在尝试创建一个具有名为 m_reaplicacao 的参数的过程。该参数接收值“S”(是)、“N”(否)和“T”(所有记录)。
当参数为Yes时,我应该返回值等于9的记录。
当参数为No时,我应该返回不等于9的记录。最后,当值为All时,我应该返回表中的所有记录。
Oracle 的代码如下:
PROCEDURE MYDB.CONTAS_A_PAGAR_SPS 的编译错误
错误:PL/SQL:ORA-00905:缺少关键字
线路:84
文本:ta.id_1a_cbr = 9;
select * from proposta ta
where
ta.estado = 'RJ'
and case
when m_reaplicacao = 'S' then
ta.id_1a_cbr = 9;
when m_reaplicacao = 'N' then
ta.id_1a_cbr <> 9
else null
end case;
我看了很多帖子,但没有解决这个问题。
有人能帮助我吗?
不要使用CASE
中的声明WHERE
当您确实想要布尔计算的简单组合时。
WHERE ta.estado = 'RJ'
AND ( m_reaplicacao = 'T'
OR (m_reaplicacao = 'S' AND ta.id_1a_cbr = 9)
OR (m_reaplicacao = 'N' AND ta.id_1a_cbr <> 9)
)
如果由于某种原因你确实想使用CASE
声明,你需要CASE
返回您在中检查的值WHERE
条款。例如
WHERE ta.estado = 'RJ'
AND (CASE WHEN m_reaplicacao = 'S' AND ta.id_1a_cbr = 9
THEN 1
WHEN m_reaplicacao = 'N' AND ta.id_1a_cbr <> 9
THEN 1
WHEN m_reaplicacao = 'T'
THEN 1
ELSE 2
END) = 1
然而,这通常不是表达这种情况的最清晰的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)