pl / sql过程包含for循环和if循环

时间:2016-03-08 18:00:09

标签: oracle plsql

我编写了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;

但是,上面的代码表示程序已成功完成但未提供所需的输出。 请告诉我上面的输出有什么问题

1 个答案:

答案 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。)