Могу ли я использовать операторы CASE of IF для условного запуска различных операторов SELECT? - PullRequest
1 голос
/ 12 июня 2019

Я хочу выполнить два разных запроса в зависимости от условия.

Это делается в Logi Studio.VariableFromLogi - это строковый литерал.Я не просто хочу заставить это работать.Я хотел бы получить лучшее понимание pl / sql.Оракул говорит, что операторы CASE возвращают s, но во всех примерах, которые я вижу, возвращаются значения.

CASE WHEN 'VariableFromLogi' = '' THEN
(SELECT "InvoiceID" 
FROM "DataManagement_Sys"   
WHERE "InvoiceID" = '1111')
ELSE
(SELECT "InvoiceID" 
FROM "DataManagement_Sys"   
WHERE "InvoiceID" = 'VariableFromLogi')
FETCH FIRST 5 ROWS ONLY
END CASE

Я получаю недопустимую ошибку оператора SQL

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Пока два запроса возвращают одинаковые столбцы, вы можете написать запрос для этого.

В вашем примере:

SELECT invoiceid
FROM datamanagement_sys
WHERE invoiceid = COALESCE(:variablefromlogi, 1111);

Более общее:

SELECT invoiceid
FROM datamanagement_sys
WHERE invoiceid = 1111 AND :variablefromlogi IS NULL
UNION ALL
SELECT invoiceid
FROM datamanagement_sys
WHERE invoiceid = :variablefromlogi;

Как видите, вы можете просто склеить различные запросы (которые возвращают одни и те же столбцы) вместе с UNION ALL, и вы используете свою переменную, чтобы только один из запросов возвращал значения.

1 голос
/ 12 июня 2019

Ну, есть много вещей, которые вы можете сделать (и даже больше, вы не можете сделать).

Код, который вы разместили, может быть переписан как (без учета смешанного регистра)

select invoiceID
from datamanagement_sys
where invoiceid = case when variableflomlogi is null then '1111'
                       else variableflomlogi
                  end;

или - даже лучше (просто предложение WHERE)

where invoiceid = nvl(variableflomlogi, '1111');

Этопростой случай.В зависимости от того, как выглядит настоящая проблема, запрос может измениться.

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