PL SQL在集合中查找重复项

时间:2014-06-20 08:53:24

标签: oracle plsql

我收藏如下。

ID       NAME
-----     -------
1          A
2          A
3          B
4          C

我想检查集合中是否有任何重复值。是否有可能在pl / sql

1 个答案:

答案 0 :(得分:3)

您可以使用plsql的内置集合运算符“set”来创建具有唯一值的集合,并将其与原始集合进行比较。然后你可以使用另一个集合运算符“except”来获取它们:

DECLARE
  type tt IS TABLE OF VARCHAR2(10);
  orig tt;
  tmp  tt;
BEGIN
  orig := tt('a', 'b', 'b', 'b', 'c', 'd', 'a');
  tmp  := SET(orig);
  IF (tmp.count = orig.count) THEN
    dbms_output.put_line('no duplicates');
  ELSE
    dbms_output.put_line('there are duplicates:');
    tmp := SET(orig MULTISET except tmp);
    FOR i IN 1 .. tmp.count
    LOOP
      dbms_output.put_line(tmp(i));
    END LOOP;
  END IF;
END;
/