【问题标题】:"exact fetch returns more than requested number of rows"“精确提取返回的行数超过了请求的行数”
【发布时间】:2017-03-28 17:22:03
【问题描述】:

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

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

【问题讨论】:

  • 试试运行SELECT CONCAT(YEAR, '-') FROM MP_APPLICATIONS。你会看到它返回不止一行,显然不能放在一个变量中。你想得到任何一个值吗?可能是最大/最小?

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


【解决方案1】:

变量 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;
/

【讨论】:

  • 当我使用 rownum 时,它只会从被调用的列中获取第一行(在 concat 中)。如何获取列的最新行? (TOP 和 LIMIT 不适用于 Oracle Apex 5)
  • @thelamp 你可以使用 rownum 值:select * from (your select + order by date)where ROWNUM
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多