ORA-01422:精确提取返回超过请求的行数ORA-06512:在第5行

时间:2014-02-10 05:00:35

标签: oracle-sqldeveloper procedural-programming

   set serveroutput on;  
   set verify off;  
   set autoprint on;  
   variable b_employee_id employees.employee_id%type;  
declare  
   v_last_name employees.last_name%type;  
   v_emp_id employees.employee_id%type;   
   begin  
   select employee_id into :b_employee_id from employees   
   where last_name='&v_last_name';   

  end;  
/  

2 个答案:

答案 0 :(得分:3)

错误消息是不言自明的。您的select语句返回了多行。当您使用INTO子句时,select不能返回多行。

来自documentation

  

默认情况下, SELECT INTO语句必须只返回一行。   否则,PL / SQL会引发预定义的异常TOO_MANY_ROWS和   INTO子句中的变量值未定义。使   确保你的WHERE子句足够具体,只能匹配一行

     

如果没有返回任何行,PL / SQL会引发NO_DATA_FOUND。你可以守卫   通过选择聚合的结果来对抗此异常   函数,例如COUNT(*)或AVG(),在可行的情况下。这些功能   保证返回单个值,即使没有行匹配   条件。

答案 1 :(得分:0)

完全提取返回超过请求的行数

这意味着,对于给定的last_name,数据库中有多个条目

如果需要,您可以获得给定employee_id最高 last_name,如下所示。

select max(employee_id) into :b_employee_id from employees   
   where last_name='&v_last_name';