“确切的提取返回超过请求的行数”

时间:2017-03-28 17:22:03

标签: sql oracle plsql oracle-apex oracle-apex-5

我正在使用Oracle Apex 5,当我尝试使用以下代码为列运行应用程序时,我收到一条错误消息,指出“确切提取的返回次数超过了请求的行数”

DECLARE
  Num VARCHAR2(40);
BEGIN
  SELECT CONCAT(YEAR, '-')
 INTO Num FROM APPS;
END;

2 个答案:

答案 0 :(得分:3)

变量terranumber只能包含一个值。因此,如果您选择查询返回多行,则会抛出此错误。

如果您想要任何一个值:

declare
    terranumber varchar2(40);
begin
    select concat(year, '-') into terranumber 
    from mp_applications
    where rownum = 1;
end;
/

也许您希望得到max(或min)年份:

declare
    terranumber varchar2(40);
begin
    select concat(max(year), '-') into terranumber 
    from mp_applications;
end;
/

或者您可能希望逐个访问所有值:

begin
    for rec in (select concat(year, '-') as year from mp_applications)
    loop
        -- use rec.year as required
    end loop;
end;
/

答案 1 :(得分:0)

使用INTO子句时,只能选择一行。通常,您添加WHERE子句条件以将返回的数据限制为仅一行。或者当然取决于你想要做什么。