-1

我的 Company_Person_all 视图中有一行,在 EMPLOYEE_NAME 列中以“YENER UZUN”命名(我已经只想要一个结果)。当我向这个函数发送参数(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;
4

2 回答 2

0

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

于 2017-08-23T14:00:37.173 回答
0

大多数情况下,使用 a cursorinstead ofselect .. into是避免ORA-01422与适当的order by( asc[ default ] / ) 子句的捷径,因为您的业务逻辑(最后一条第一desc条记录)更喜欢哪些记录,如下所示:

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;
于 2018-07-23T12:38:24.827 回答