我有一个查询,输入值为:“Amar, Akbar, Anthony”
我希望查询将输入值视为:'Amar'、'Akbar'、'Anthony'。我有一个 regexp_substr 可以在正常查询中使用并达到目的,但是当我将它与 Case 放在一起时,它会给出以下错误。
Single row query returns more than one row
编写 CASE 是为了如果用户未在文本框中输入任何内容,则查询应返回所有行,如果用户输入内容,结果应显示匹配值。
Select * from test_tbl a where
(
CASE
WHEN TRIM (:username) IS NULL
THEN NVL (a.user_name, 'NOTHING')
WHEN TRIM (UPPER (:username)) = 'NOTHING'
THEN NVL (a.user_name, :username)
ELSE UPPER (a.user_name)
END) LIKE (
CASE
WHEN TRIM (:username) IS NULL
THEN NVL (a.user_name, 'NOTHING')
WHEN TRIM (UPPER (:username)) = 'NOTHING'
THEN :username
ELSE ((select regexp_substr(:username,'[^,]+', 1, level) from dual connect by regexp_substr(:username, '[^,]+', 1, level) is not null))
END)
有没有办法实现所需的功能?这不会对查询进行太多更改,并将 CASE 包含在 regexp_substr 中。