0

我正在尝试在 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;
4

1 回答 1

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;

如果您真的想强制执行唯一性,则应该创建一个唯一约束,尽管我建议您不要这样做;不能保证您不会有两个同名的员工。

于 2013-03-16T14:54:23.867 回答