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

标签 oracle plsql conditional scalar-subquery

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

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

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

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

根据我在 Oracle 文档中所读到的 if 和 when 支持 bool 表达式,If 条件是否支持子查询的任何想法。

注意:语句已经简化,我不会真正去获取整个表的计数,所以没有优化建议

最佳答案

不,您不能以您想要的方式使用 SELECT。

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

关于oracle - PL/SQL 中 if 语句条件中的标量子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/810919/

相关文章:

oracle - 如何测试目录Oracle的读/写文件系统权限?

sql - 我可以使用带有检查约束的 select 语句吗

php - PHP 和 Oracle 可以相互传递复杂类型吗?

java - 正则表达式 - 查找文件中的所有字符串函数参数

sql - 将空白字符连接到字段值

amazon-web-services - Amazon S3 条件放置对象

java - for循环条件部分的final关键字

oracle - 在 Oracle 中循环 CURSOR 时使用 EXIT WHEN 指令是一种不好的做法吗?

oracle - 在oracle中执行存储过程

java - Oracle OCI 驱动程序在密码过期警告时抛出/零错误