ora-01422 ошибка в инструкциях SELECT INTO

У меня есть одна строка в моем представлении 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 ответа

Я решил это, изменив имя параметра "fname" на "xyz". 'fname' использовала имя экземпляра RECORD другими процедурами и функциями в пакете. Так что, когда я изменил имя параметра, ошибка мгновенно исправлена.

В основном, используя cursor вместо select .. into это ярлык, чтобы избежать ORA-01422 с надлежащим order by(asc [поумолчанию] / 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;
Другие вопросы по тегам