返回重复计数时,值不足

时间:2013-03-16 14:46:48

标签: oracle plsql duplicates

我正在尝试在Iracle中创建一个存储过程,它应该从单个表中返回重复记录的数量。

我试图将该计数的结果返回给用户。目前我收到错误“错误(6,78):PL / SQL:ORA-00947:值不够”

我做错了什么?

CREATE OR REPLACE PROCEDURE DUPLICATECHECK (p_result OUT number)  
IS
theResult number;
BEGIN
   SELECT FIRST_NAME, LAST_NAME, COUNT(1) as "Duplicate Found" INTO theResult 
   FROM EMPLOYEE GROUP BY FIRST_NAME, LAST_NAME HAVING COUNT(*) > 1;
p_result := theResult;
END DUPLICATECHECK;

1 个答案:

答案 0 :(得分:1)

你的问题就在这一行:

SELECT FIRST_NAME, LAST_NAME, COUNT(1) as "Duplicate Found" INTO theResult 

具体来说,您将3个不同的列放入一个结果中,但没有足够的值。

虽然您只需要选择一个值

,但您只需查找一个值
select count(*)
  into p_result
  from ( select first_name, last_name
           from employee
          group by first_name, last_name
         having count(*) > 1 )

如果必须使用过程,可以直接选择OUT参数,不需要局部变量。你为什么使用程序而不是函数?

把这些放在一起你得到:

create or replace function duplicatecheck ( 
         p_result out number ) is
begin

    select count(*)
      into p_result
      from ( select first_name, last_name
               from employee
              group by first_name, last_name
             having count(*) > 1 )

end duplicatecheck;

如果你真的想要强制执行唯一性,你应该创建一个unique constraint,但我建议不要这样做;不能保证你不会有两个同名的员工。