查询:
SELECT COUNT(keyvalue) INTO cntmismatch FROM tbl_temp GROUP BY keyvalue
cntmismatch
... 将尝试为每个返回一行,如果表为空并且如果有多个keyvalue
,这将失败。no_data_found
too_many_rows
keyvalue
添加:
HAVING count(keyvalue) > 1
...意味着它只会为任何keyvalue
具有多个条目的值返回一个值,很明显,所以现在你会得到no_data_found
表是否为空或 nokeyvalue
出现两次;too_many_rows
如果不止一个有keyvalue
重复。keyvalue
仅当您恰好有一个具有重复项时,它才会起作用。
您没有显示其余的逻辑,但大概您正在根据该返回值做某事,在这种情况下 - 如果只有一个keyvalue
,这不太可能 - 您可以省略该HAVING
子句并仅测试该值:
SELECT COUNT(keyvalue) INTO cntmismatch FROM tbl_temp GROUP BY keyvalue;
IF cntmismatch > 1 THEN
... -- some processing
END IF:
但充其量,它告诉你的只是是否有任何keyvalue
出现不止一次;它没有告诉你它们keyvalue
是什么,而且仍然无法应对不止一个。
如果要检索具有多个匹配行的所有值并对其进行处理,则可以使用游标:
FOR dup_keyvalues IN (SELECT keyvalue, COUNT(*) AS cnt
FROM tbl_temp GROUP BY keyvalue HAVING COUNT(*) > 1) LOOP
... - some processing, e.g.
DBMS_OUTPUT.PUT_LINE('keyvalue ' || dup_keyvalues.keyvalue
|| ' has ' || dup_keyvalues.cnt || ' matches');
...
END LOOP;