create or replace function getempname(empnum emp.empno%type)
return emp.ename%type
is
empname emp.ename%type;
begin
select ename into empname from emp 
where empno = empnum;
return empname;
end;通过下面测试 返回多条记录
select getempname(7931),empno from emp
我想要的是返回一条记录 怎么写

解决方案 »

  1.   

    你只想在返回的这些多行记录中任取一条吗?那就加个rownum=1的条件。
    如果是想根据一定条件返回一条结果,那就修改你的查询。
      

  2.   

    这样就返回一条了吧?create or replace function getempname(empnum emp.empno%type) 
    return emp.ename%type 
    is 
    empname emp.ename%type; 
    begin 
    select ename into empname from emp 
    where empno = empnum
    rowid<2; 
    return empname; 
    end; 
      

  3.   

    你这段代码可以返回多条记录吗?select ename into empname from emp这条语句如果返回的是多行,那么会报‘实际返回的行数超出请求的行数’这个异常吧???
      

  4.   

    select ename into empname from emp 
    where empno = empnum; 有into,函数可以正常调用,说明只返回了一个结果吧?如果是最后那个select语句导致了多行相同的结果,可以加distinct,或者rownum=1限制只输出一行。