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つの異なる列を1つの結果に入れているため、十分な値がありません。

1つの値だけを探しているので、その値だけを選択する必要があります

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;

本当に一意性を強制したい場合は、一意性制約を作成する必要がありますが、これはお勧めしません。同じ名前の従業員が2人いないという保証はありません。

于 2013-03-16T14:54:23.867 に答える