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;