首页 > 解决方案 > Oracle - 选择一个布尔值?从 MYTABLE 中选择 COUNT(*) > 0

问题描述

取下面两个SQL语句中执行的C#。它们返回不同的值,具体取决于您是否使用MySQLor Oracle

//MySQL / MariaDB:
1a. SELECT COUNT(*) FROM MYTABLE //returns long
2a. SELECT COUNT(*) > 0 FROM MYTABLE //returns int (1 if true, 0 if false)

//Oracle:
1b. SELECT COUNT(*) FROM MYTABLE //returns int
2b. SELECT COUNT(*) > 0 FROM MYTABLE //ORA-00923: FROM keyword not found where expected

我想知道是否有办法让语句 (2b) 与 Oracle 一起工作(选择一个布尔值,最好模仿 MySQL——如果为真,则为 0,如果为假,则为 0)。

我试图避免使用特定于数据库的函数,如 IF、IIF、IFNULL、CASE 等。我正在尝试编写数据库通用语句。

标签: c#mysqlsqloracleboolean

解决方案


由于 Oracle SQL中没有布尔数据类型,因此您无法真正避免CASE(或DECODE)。所以,对于一张空桌子,你会有这样的东西:

SQL> select count(*) from test;

  COUNT(*)
----------
         0

SQL> select case when count(*) > 0 then 'true'
  2              else 'false'
  3         end as result
  4  from test;

RESUL
-----
false

SQL>

请注意,在本例中,结果是一个字符串!您可以返回其他内容,例如一个数字:

SQL> select case when count(*) > 0 then 1
  2              else 0
  3         end as result
  4  from test;

    RESULT
----------
         0

SQL>

但是,正如我所说,布尔值不在 SQL 中(在 PL/SQL 中是的,但这不是你问的)。

SQL> declare
  2    l_cnt      number;
  3    l_result   boolean;         --> this
  4  begin
  5    select count(*) into l_cnt from test;
  6
  7    l_result := l_cnt > 0;
  8  end;
  9  /

PL/SQL procedure successfully completed.

SQL>

推荐阅读