我可以使用IF语句的CASE有条件地运行不同的SELECT语句吗?

时间:2019-06-12 19:48:18

标签: oracle plsql

我想根据条件运行两个不同的查询。

这是在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 个答案:

答案 0 :(得分:1)

嗯,您可以做很多事情(甚至更多,您不能做)。

您发布的代码可以重写为(忽略大小写)

CGLayerGetContext

或者-甚至更好(只是select invoiceID from datamanagement_sys where invoiceid = case when variableflomlogi is null then '1111' else variableflomlogi end; 子句)

WHERE

这是一个简单的情况。根据实际问题的样子,查询将发生变化。

答案 1 :(得分:1)

只要两个查询返回相同的列,就可以为此编写查询。

在您的示例中:

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粘合在一起,并且使用变量使查询中只有一个返回值。