使用Select Case语句中的提示

时间:2018-04-09 10:36:05

标签: sql oracle peoplesoft

我想在我的提示中使用select case。条件是当提示符:4 ='我'然后提示:5等于它的所有值,我使用下面的代码,但我收到以下错误。

由于SQL错误,代码= 936,消息= ORA-00936:缺少表达式(50,380)而运行查询时出错

2 = 2 AND (CASE :5
WHEN :4 = 'I' AND :5 = ' ' 
THEN :5 = '%' 
END)

我的案件状态有什么问题吗?

3 个答案:

答案 0 :(得分:3)

CASE有两种不同的语法:

CASE value1
WHEN value2 THEN expression1
WHEN value2 THEN expression2
            ELSE expression3
END

CASE
WHEN boolean_expression THEN expression1
WHEN boolean_expression THEN expression2
                        ELSE expression3
END

注意:第一个语句可以转换为第二个语句

CASE
WHEN value1 = value2 THEN expression1
WHEN value1 = value3 THEN expression2
                     ELSE expression3
END

您正在混合使用这两种语法,它是无效的SQL。

您似乎想要:

:5 = CASE WHEN :4 = 'I' AND :5 = ' ' THEN '%' END

然而,即使这样也不会起作用,因为绑定变量只设置一次并且没有重新评估,所以你的逻辑将是:

   (     ( :4 = 'I' AND :5 = ' ' ) AND :5 = '%' )
OR ( NOT ( :4 = 'I' AND :5 = ' ' ) AND :5 = NULL )

由于:5不能同时是' ''%',因此逻辑的那个分支永远不会是真的,任何东西(包括NULL)永远不会等于{{ 1}}所以逻辑的第二个分支也永远不是真的;因此,你的表达永远不会匹配。

答案 1 :(得分:1)

只需创建一个像这样的表达式

decode(:4,'I',:5,SOMEVALUEORFIELD) = :5

答案 2 :(得分:0)

这是您的case表达式:

(CASE :5 WHEN :4 = 'I' AND :5 = ' ' THEN :5 = '%' 
 END)

我无法弄清楚你真正想要的是什么。 CASE :5:5 = '%'都不合适。也许:

(CASE WHEN :4 = 'I' AND :5 = ' ' THEN '%' 
 END) as :5

但是,您通常不使用列别名的参数。