检查所有行是不是符合给定条件

Posted

技术标签:

【中文标题】检查所有行是不是符合给定条件【英文标题】:Check that all rows match a given criterion检查所有行是否符合给定条件 【发布时间】:2009-07-09 11:51:18 【问题描述】:
requestId   Consultantid  statusid
1           2             10
2           2             10
3           2             10

我想检查每一行的 statusid 是否为 10。

if (every row has a statusid of 10) then
  -----do this
endif;

【问题讨论】:

我想检查所有 statusid 值是否必须等于 10,如果单个 statusid 值不是 10,那么条件应该返回 false @secko :-我不想检查任何一个,我想检查 statusid =10 的每个字段 select * from blablabla_table where if(statusid = 10) then something, something else return false end if; 你得到了一些不错的答案,检查一下!还要检查,java2s.com/Tutorial/Oracle/0440__PL-SQL-Statements/… @ Welbog ...让我试试.. tnks Welbog,Secko 【参考方案1】:

我对 PL-SQL 有点生疏了,但是这样的东西在 T-SQL 中可以工作:

 if not exists (select * from your_table where statusid <> 10) then
    -- whatever
 end

编辑: 好的,显然在 PL-SQL 中,您需要执行以下操作:

DECLARE
  notallten INTEGER;
BEGIN
  SELECT COUNT(*) INTO notallten 
  FROM your_table
  WHERE statusid <> 10
  AND ROWNUM = 1;
  IF notallten = 0 THEN
    -- Do something
  END IF;
END;

不过,我没有要测试的 Oracle 服务器。

【讨论】:

这在 SQL Server 中有效,但在 Oracle PL/SQL 中无效,不能这样混合。 SQL 无法处理布尔变量。 为什么需要ROWNUM?没有那个看起来不错。【参考方案2】:
declare
v_exists_status_10 number(1);
...

begin
...
-- v_exists_status_10 = 0 if no such row exist, 1 if at least one does
select count(*)
into   v_exists_status_10
from   dual
where  exists
  (select * from your_table where statusid <> 10);

if v_exists_status_10 > 0 then
...

请注意,您也可以对变量执行愚蠢的 COUNT(),但与 EXISTS 相比,它的效率可能非常低。使用 COUNT(),您必须扫描所有记录,而使用 EXISTS,只要它达到 statusid = 10,它就可以停止扫描。

【讨论】:

【参考方案3】:

更简单的解决方案,在 statusid 中​​考虑 NULL:

for r in (
  select 1 dummy
  from   your_table
  where  (statusid != 10 or statusid is null)
  and    rownum = 1) loop
    -----do this
end loop;

【讨论】:

以上是关于检查所有行是不是符合给定条件的主要内容,如果未能解决你的问题,请参考以下文章

查看选择中的所有行是不是符合条件

SignTool 错误:未找到符合所有给定条件的证书。 VS2019

Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行