if 语句中的标量子查询 PL/SQL 中的条件

scalar subquery in if statement Condition in PL/SQL(if 语句中的标量子查询 PL/SQL 中的条件)
本文介绍了if 语句中的标量子查询 PL/SQL 中的条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类似于下面的 If 语句块,它因错误而失败 -PLS-00103:在期待以下之一时遇到符号SELECT"......

I have an If Statement block similar to the below which is failing with the error - PLS-00103: Encountered the symbol "SELECT" when expecting one of the following....

Begin
    If (select count(*) from Table1) > 0 then
        dbms_output.put_line('Test');
    end if;
end;

我有类似的 Case 语句,效果很好

I have similar Case statement which works fine

select 
case 
    when (select count(*) from Table1) > 0
        then 2
    else
        1
end
from dual

从我在 Oracle 文档中读到的 if 和 when 支持布尔表达式,任何想法是否在 If 条件中支持子查询.

From what i have read in Oracle Documentation the if and when support a Boolean Expression, any ideas whether Subqueries are supported in If Conditions.

注意:语句已经简化,我不是真的要得到整个表的计数,所以没有优化建议

Note: The Statements have been simplified, i am not really going to get the count of the entire table, so no optimization suggestions please

推荐答案

不,您不能以自己想要的方式使用 SELECT.

No, you can't use a SELECT in the way you want.

在您使用 CASE 的示例中,您没有使用 CASE语句"——您使用的是 CASE 表达式,它恰好嵌入在 SQL 语句中.在这种情况下,您可以使用子查询,因为它位于 SQL 语句的上下文中,而不是过程语句.您将无法在过程 CASE 语句中使用这样的子查询.

In your example using CASE, you are not using a CASE "statement" -- you are using a CASE expression, which happens to be embedded within a SQL statement. You can use a subquery in that case because it's within the context of a SQL statement, not a procedural statement. You wouldn't be able to use a subquery like this in a procedural CASE statement.

这篇关于if 语句中的标量子查询 PL/SQL 中的条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)