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;
/
答案 0 :(得分:3)
错误消息是不言自明的。您的select
语句返回了多行。当您使用INTO
子句时,select不能返回多行。
默认情况下, 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';