我编写了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 :(得分: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
。)