入力値が「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)
必要な機能を実現する方法はありますか? それはクエリをあまり変更せず、regexp_substr に CASE を含めます。