IF else 条件对于 Oracle SQL Developer 无法正常工作

问题描述 投票:0回答:1

我基本上一直在使用 SQL Server。然而,最近我已经转移到 Oracle,我正在尝试一个简单的 if else 语句,但它在 Oracle SQL Developer 中给出错误。下面是未执行的查询

              IF (? = 'MEANING') THEN    
                      SELECT rv_meaning_l1 vc_result 
                      FROM   TableA
                      WHERE  rv_domain = 'CLAIM TYPE'
                      AND    rv_low_value = '10';  
        
              ELSIF (? = 'ABBREVIATION') THEN
                          SELECT rv_abbreviation_l1  vc_result
                          FROM   TableA
                          WHERE  rv_domain = 'CLAIM TYPE'
                          AND    rv_low_value = '10';
              END IF; 

的值将通过ODBC连接来自Power BI分页报表的参数。但是,我收到错误,并且这个 if block 根本没有执行。我尝试通过替换 ? 来检查 sql Developer与 'MEANING' 但代码仍然没有执行。

             IF ('MEANING' = 'MEANING') THEN    
                      SELECT rv_meaning_l1 vc_result 
                      FROM   TableA
                      WHERE  rv_domain = 'CLAIM TYPE'
                      AND    rv_low_value = '10';  
        
              ELSIF ('MEANING' = 'ABBREVIATION') THEN
                          SELECT rv_abbreviation_l1  vc_result
                          FROM   TableA
                          WHERE  rv_domain = 'CLAIM TYPE'
                          AND    rv_low_value = '10';
              END IF; 

提前致谢。

oracle reporting-services oracle-sqldeveloper powerbi-paginated-reports
1个回答
1
投票

您只能在 PL/SQL 上下文中使用

IF
,因此您的代码需要位于 BEGIN
END
 之间,并且您需要选择某些内容,这并不是您真正想要的.

不过,您不需要这种形式的逻辑或两个查询,您可以使用带有

case 表达式 的单个查询来决定所选的列:

SELECT CASE(? WHEN 'MEANING' THEN rv_meaning_l1 WHEN 'ABBREVIATION' THEN rv_abbreviation_l1 ELSE NULL END vc_result FROM TableA WHERE rv_domain = 'CLAIM TYPE' AND rv_low_value = '10';
 

ELSE NULL

 是可选的,因为如果没有任何匹配,则这是默认值,但我将其放入以使其更清晰,因此如果您愿意,如果变量不是预期值,您可以返回一些其他值。

如果您想在 SQL Developer 中测试它,则

以它识别的形式使用绑定变量

var arg varchar2(10); exec :arg := 'MEANING'; SELECT CASE(:arg WHEN 'MEANING' THEN rv_meaning_l1 WHEN 'ABBREVIATION' THEN rv_abbreviation_l1 ELSE NULL END vc_result FROM TableA WHERE rv_domain = 'CLAIM TYPE' AND rv_low_value = '10';
您可以在 SQL*Plus 手册中阅读有关 

VARIABLE

EXECUTE
 命令的更多信息; SQL Developer 使用大部分相同的命令。

© www.soinside.com 2019 - 2024. All rights reserved.