我正在尝试在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;
答案 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,但我建议不要这样做;不能保证你不会有两个同名的员工。