SELECT INTO语句中出现ora-01422错误

时间:2017-08-23 10:51:23

标签: oracle plsql select-into ora-01422

我的Company_Person_all视图中有一行,由YENER UZUN'在EMPLOYEE_NAME列中(我只想要一个结果)。当我向这个函数发送参数时(fname,而不是使用' YENER UZUN')我遇到

ORA-01422:exact fetch returns more than requested number of rows ...

我该怎么做才能防止此错误?此外,当我编写下面的代码(' YENER UZUN',而不是fname)时,它没有给我一个错误。

FUNCTION Get_Calistigi_Santiye_By_Fname(fname IN varchar2)
    RETURN varchar2 
IS
    temp_ varchar2(100);
BEGIN
    select free_field6
    into   temp_
    from   company_person_all
    where  employee_name = 'YENER UZUN';

    DBMS_OUTPUT.put_line(temp_);
    RETURN temp_;
END;

2 个答案:

答案 0 :(得分:0)

我通过将'fname'参数名称更改为'xyz'来解决它。 'fname'被包中的其他过程和函数用作RECORD实例名。 因此,当我更改参数名称时,错误立即修复。

答案 1 :(得分:0)

通常,使用cursor代替select .. into是避免 ORA-01422 并使用适当的order byasc em> default ] / desc)子句,因为哪个记录更适合您的业务逻辑( last first record),如以下:

FUNCTION Get_Calistigi_Santiye_By_Fname( fname company_person_all.employee_name%type )
    RETURN company_person_all.free_field6%type 
IS
    temp_ company_person_all.free_field6%type;
BEGIN
  for c in
   (
    select free_field6 ff6
      from company_person_all
     where employee_name = fname --> 'YENER UZUN'
     order by work_date_time
   )
   loop
    temp_ :=  c.ff6;
   end loop;    
    dbms_output.put_line(temp_);

    RETURN temp_;
END;