我想在我的提示中使用select case。条件是当提示符:4 ='我'然后提示:5等于它的所有值,我使用下面的代码,但我收到以下错误。
由于SQL错误,代码= 936,消息= ORA-00936:缺少表达式(50,380)而运行查询时出错
2 = 2 AND (CASE :5
WHEN :4 = 'I' AND :5 = ' '
THEN :5 = '%'
END)
我的案件状态有什么问题吗?
答案 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
但是,您通常不使用列别名的参数。