c# - Oracle - 选择一个布尔值?从 MYTABLE 中选择 COUNT(*) > 0
问题描述
取下面两个SQL
语句中执行的C#
。它们返回不同的值,具体取决于您是否使用MySQL
or 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 等。我正在尝试编写数据库通用语句。
解决方案
由于 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>
推荐阅读
- vue.js - Vue如何判断文件输入是否为空
- pandas - 计算列中存在的不同数量的组合
- c# - 在 asp.net core 3 中使用 SpaStaticFiles() 查看嵌入式资源
- javascript - Firebase,云功能,根据日期更改值
- powershell - 使用 PowerShell 根据名称将文件列表复制到文件夹
- c# - 反应式扩展和 IDisposable 管理
- git - Gitlab 12.2.4 服务器挂钩未触发
- java - 使用 Renjin 在 Java 中加载 rdara/rds 文件
- powerbi - PowerBi - 将数据传输到 PowerBi Cloud
- reactjs - 多个 graphql 查询