我的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;
答案 0 :(得分:0)
我通过将'fname'参数名称更改为'xyz'来解决它。 'fname'被包中的其他过程和函数用作RECORD实例名。 因此,当我更改参数名称时,错误立即修复。
答案 1 :(得分:0)
通常,使用cursor
代替select .. into
是避免 ORA-01422 并使用适当的order by
(asc
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;