2016-03-08 1 views
-1

Я написал код PL/SQL, чтобы проверить, является ли элементы в одном столбце больше, чем среднее значение той же самой колонкепл/процедура SQL, содержащий цикл, и если цикл

set serveroutput on; 
     DECLARE 
     v_count Number := 0; 
     v_num Number := 0; 
     v_xVal tblNewData.xValue%type; 
    v_avgX Number := 0; 
     BEGIN 
     SELECT round(avg(xValue),2) 
      INTO v_avgX 
      FROM tblNewData; 
      For i IN 1 .. v_count LOOP 
      SELECT xValue 
      INTO v_xVal 
      FROM tblNewData 
     where dataID = i * 10; 

       v_num := v_num + 1; 

     if (v_xVal > v_avgX) then 
      dbms_output.put_line('x value greater than y average ' || v_xVal); 

     end if; 
     end LOOP; 



     END; 

однако, выше код говорит, что процедуры успешно завершены, но не предоставили желаемый результат. Пожалуйста, скажите мне, что не так с выводом выше

+0

Вам нужно написать процедуру или SQL-запрос, который будет работать? –

+0

@ketub .. Мне нужно написать процедуру –

+0

Что такое «желаемый результат»? Каков фактический результат? Где ваш воспроизводимый тестовый пример? –

ответ

0

Также select into внутри цикла может не возвращать строки.

Общая логика строк отчетов, где значение больше, чем в среднем может быть сделано в запросе вдоль линий:

select sequence_name 
    , 'Value ' || cache_size || ' is greater than median ' || med_cache_size as warning 
from (select sequence_name 
       , cache_size 
       , median(cache_size) over() as med_cache_size 
     from user_sequences) 
where cache_size > med_cache_size; 

(я использовал user_sequences и median создать простой тест, , но вы можете заменить tblnewdata и avg.)

+0

по какой-то причине dhruv хочет процедуру. –

+0

Да, я почти почти добавил примечание, чтобы сказать, что он может обернуть это в своей собственной процедуре создания или замены x как begin ... end; 'если он действительно хочет, но это было очевидно;) –

+0

извинения за то, что не видели очевидно :) –