坚持这个错误...
DECLARE
AVGRUNTIME number(10,0);
PERFCATEGORYRANGELOCOUNT number(10,0);
PERFCATEGORYRANGEHICOUNT number(10,0);
DW_LOW number(10,0);
DW_HI number(10,0);
CURSOR LC_ABC IS
select distinct(ap.dwprocessid)
from auditprocess ap, dwprocess d
where ap.dwprocessid = d.dwprocessid
and ap.insertts > sysdate - 61
and dwprocessmonitorind = 'Y';
BEGIN
FOR REC IN LC_ABC
LOOP
select ((ap.LASTUPDATETS - INSERTTS)*24*60*60) as AVGRUNTIME,
(.1 * ((ap.LASTUPDATETS - INSERTTS)))as PERFCATEGORYRANGELOCOUNT ,
(1.9 * ((ap.LASTUPDATETS - INSERTTS)))as PERFCATEGORYRANGEHICOUNT
INTO AVGRUNTIME, PERFCATEGORYRANGELOCOUNT, PERFCATEGORYRANGEHICOUNT
from auditprocess ap
where ap.dwprocessid = rec.dwprocessid
and insertts > sysdate - 61
group by (ap.LASTUPDATETS - INSERTTS);
第1行的[错误] [1] ORA-01422:精确提取返回超过请求的行数 ORA-06512:第27行
答案 0 :(得分:1)
您按ap.LASTUPDATETS - INSERTTS
进行分组,如果您有2个不同的值,则错误将会增加,因为您无法在变量中插入2行。
也许你不应该按照这些列进行分组,并在select子句中使用聚合函数,如:
select avg((ap.LASTUPDATETS - INSERTTS)*24*60*60) as AVGRUNTIME,
min(.1 * ((ap.LASTUPDATETS - INSERTTS)))as PERFCATEGORYRANGELOCOUNT ,
max(1.9 * ((ap.LASTUPDATETS - INSERTTS)))as PERFCATEGORYRANGEHICOUNT
INTO AVGRUNTIME, PERFCATEGORYRANGELOCOUNT, PERFCATEGORYRANGEHICOUNT
from auditprocess ap
where ap.dwprocessid = rec.dwprocessid
and insertts > sysdate - 61;
答案 1 :(得分:0)
这正是错误所说的。您的SELECT ... INTO返回多行。
CURSOR LC_ABC包含一个DISTINCT - 这意味着您已经知道dwProcessId可能在表auditProcess中出现多次。
然后使用完全相同的逻辑从表中再次选择 - 这将返回所有匹配的行。
然后使用lastUpdateTS - insertTs的值进行聚合。因此,每个dwProcessId返回一行(lastUpdateTS - insertTs)