2016-03-08 35 views
-1

我已经写PL/SQL代码以检查在一列中的元素是否比同一列的平均值更大PL/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_sequencesmedian创建一个简单的测试案例,但是您可以用tblnewdataavg替代。)

+0

由于某种原因dhruv想要一个程序。 –

+0

是的,我几乎几乎添加了一个注释,说他可以用自己的'创建或替换过程x作为开始...结束;'如果他真的想要,但它似乎很明显;) –

+0

道歉没有看到明显 :) –