本人写了一个存储过程,代码如下:
Create or replace procedure sp_pro10(empNo in number,empName out varchar2) is
begin
  select distinct ename into empName from emp where empno = empNo;
end;
然后再调用这个过程
SQL>var ename varchar(50)
SQL>exec sp_pro10(7788,:ename);
结果出现以下的错误:
ORA-01422: 实际返回的行数超出请求的行数、
但我用select disctinct ename from emp where empno = 7788;查出来的记录就只有一条啊,郁闷死了。

解决方案 »

  1.   

    Create or replace procedure sp_pro10(empNo in number,empName out varchar2) is
    begin
    select distinct name into empName from stu where greadeid = empNo;
    end;执行过程:
    SQL> var ename varchar2(10);
    SQL> exec sp_pro10(4,:ename);
     
    PL/SQL procedure successfully completed
    ename
    ---------
    Name4没有出现类似情况SQL> exec sp_pro10(1,:ename);ORA-01422: 实际返回的行数超出请求的行数
    ORA-06512: 在 "SOC.SP_PRO10", line 3
    ORA-06512: 在 line 2查询结果为返回多条记录,所以猜测你应该是返回了多条记录,建议改别的数据
    多次进行测试一下。
      

  2.   

    select distinct ename into empName from emp where empno = empNo;
    修改为select distinct ename into empName from emp where empno = empNo and rownum=1;
      

  3.   

    select distinct ename into empName from emp where empno = empNo;这条语句返回二个值吧?
      

  4.   

    同意楼上的,select distinct ename into empName from emp where empno = empNo;
    返回的是多个值,怎样插入到一个变量中呢?
      

  5.   

    select distinct ename into empName from emp where empno = empNo and rownum<2;