2009-07-09 4 views
0
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; 
+0

Ах, я получаю сейчас. – Welbog

+0

Я хочу проверить, что все значения statusid должны быть равны 10, если одно значение статуса не равно 10, тогда условие должно возвращать значение false – 2009-07-09 12:02:44

+0

@secko: -i не хочу проверять кого-либо, я хочу проверить каждое поле statusid = 10 – 2009-07-09 12:05:36

ответ

1

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

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

Edit: Ok, Apparantly в 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

Это работает на SQL Server, но а не в Oracle PL/SQL, его нельзя смешивать. SQL не может обрабатывать логические переменные. –

+0

Да, ROWNUM = 1 должен работать, а также EXISTS –

+0

Зачем нужен ROWNUM в этом? Без этого он выглядит хорошо. –

0
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, как только он нажмет статус = 10, он может остановить сканирование.

0

Simpler решение, которое учитывает значения 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; 
Смежные вопросы