Убедитесь, что все строки соответствуют заданному критерию - PullRequest
0 голосов
/ 09 июля 2009
requestId   Consultantid  statusid
1           2             10
2           2             10
3           2             10

Я хочу проверить, имеет ли каждая строка статус 10. 10.

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

Ответы [ 3 ]

1 голос
/ 09 июля 2009

Я немного заржавел на PL-SQL, но что-то вроде этого будет работать в T-SQL:

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

Edit: Хорошо, очевидно, в 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 для тестирования.

0 голосов
/ 01 октября 2009

Более простое решение, которое учитывает NULL в statusid:

for r in (
  select 1 dummy
  from   your_table
  where  (statusid != 10 or statusid is null)
  and    rownum = 1) loop
    -----do this
end loop;
0 голосов
/ 09 июля 2009
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, он может остановить сканирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...