【问题标题】:ora-01422 error in SELECT INTO statementsSELECT INTO 语句中的 ora-01422 错误
【发布时间】:2017-08-23 10:51:22
【问题描述】:

我的 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;

【问题讨论】:

  • 这不应该发生。你是如何调用函数并传入fname 值的?
  • BEGIN dbms_output.put_line('something': '||company_person_api.Get_Calistigi_Santiye_By_Fname('YENER UZUN'));结尾; /* 像这样 */
  • 并且这段代码只返回一行给我... select * from Company_Person where employee_name ='YENER UZUN';
  • 调试它 - 更改过程以循环遍历返回的行并写出他们的employee_names和ROWIDs或类似的东西。

标签: oracle plsql select-into ora-01422


【解决方案1】:

我通过将“fname”参数名称更改为“xyz”解决了这个问题。 'fname' 被包中的其他过程和函数用作 RECORD 实例名称。 这样当我更改参数名称时,错误立即得到修复。

【讨论】:

  • 我,至少不知道 Oracle 中名为 fname 的任何全局参数。
  • 这是一个基于Oracle的ERP系统,名为IFS。我不明白为什么它完全解决了我的问题。但是改参数名不是开玩笑,它解决了这个错误。
  • 不要跟随你不确定的。它现在可能对您有所帮助,但在其他地方会受到伤害。试试我的解决方案,看看是否可行。
  • 您的函数没有使用fname,因此不清楚名称冲突是如何造成问题的。
【解决方案2】:

大多数情况下,使用cursor 代替select .. into 是避免ORA-01422 的捷径,使用适当的order by(asc [默认] /desc) 子句,因为您的业务逻辑更喜欢哪个记录(lastfirst 记录),如下所示:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2014-02-07
    相关资源
    最近更新 更多