Использование выражения CASE в Oracle - PullRequest
0 голосов
/ 24 октября 2019

У меня есть сценарий, где, если запрос от пользователя (либо 1, либо 0) = 1, то он должен возвращать значения из двойного, иначе он должен возвращать другие данные таблицы

Ниже запроса, который я пробовал: но получаю ошибку: слишком много значений

with CTE_ACC_FNKEYS AS (
(select 
CASE WHEN 1=1
--@Prompt('Users:','A','Customer\Customer Account\Source System Code',Mono,Free,Not_Persistent,,User:3) is not null
then (select  e,f,g,h  from dual)
else
   (
   SELECT
      a,b,c,d
   FROM
       TABLE ( BI_RPT.GET_ACCOUNTDETAILS( 'ON897451','[SA].[0]') ))

end as b  from dual      
))

select * from CTE_ACC_FNKEYS

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Ваш код и ваше объяснение этого кажутся неясными, но я думаю, что вы пытаетесь вернуть разные результаты в зависимости от ввода пользователя. Без сомнения, есть веская причина, по которой эта логика не может быть включена в BI_RPT.GET_ACCOUNTDETAILS (), но ее решение с помощью CASE не является правильным подходом.

Одним из решений было бы написание функции-оболочки. Но самым близким к вашему текущему коду решением будет UNION.

select a, b , c, d
from   TABLE ( BI_RPT.GET_ACCOUNTDETAILS( 'ON897451','[SA].[0]') ))
where &&p_user_input = 0
union
select 0, 0, 0 , 0 -- or whatever is represented by e, f, g, h
from  dual
where &&p_user_input != 0
0 голосов
/ 24 октября 2019

Вы можете выбрать только одно значение, как прокомментировал @Ankit Bajpai. Например:

with CTE_ACC_FNKEYS AS (
(select 
CASE WHEN 1=1
then (select '0' from dual)
else
   (
   SELECT
      'a'||'b'||'c'||'d'
   FROM
      dual)

end as b  from dual      
))

select * from CTE_ACC_FNKEYS;

Демо. Если вам понадобится что-то другое, пожалуйста, объясните более подробно и приведите несколько примеров результатов, которые вы хотите получить. Ура! * * 1006

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...